Column store index 列数据如何匹配成行数据?
2013-07-19 15:13
197 查看
SQL Server 2012引入了列存储索引,对每列的数据进行分组和存储,然后联接所有列以完成整个索引。这不同于传统索引,传统索引对每行的数据进行分组和存储,然后联接所有行以完成整个索引。
在访问基于行存储的索引时,如果要查询一个字段需要将整个Page读入内存,所以默认会读到所有行的数据:
通过上面的图片可以看出,如果一个查询只想查询字段A的值,代价是读取所有的页面,包括了不需要的字段B,C,D,E。
与行存储模式相比,使用列存储只需要读取单独的列数据,这样可以减小IO的消耗,同时提供缓存的使用。
但是列存储索引是如何在磁盘存储的?如果我们只是将列的数据存储在一起,如何在查询的时候重新创建成行数据。
举个例子:如果字段“名称”存储了“Kevin”和“Allen”两个值,“生日”栏位存储了“19650112”和“”19680415“。那么我们在查询的时候如何能够将Kevin和生日匹配起来。
答案是数据的位置标明它属于哪一行。因此在“名称”字段中行1存储了“Kevin “,在“生日”栏位中第一行对应的存储了“19650112“。依次类推,这样查询的时候就可以将所有的栏位匹配为对应的行。
在访问基于行存储的索引时,如果要查询一个字段需要将整个Page读入内存,所以默认会读到所有行的数据:
通过上面的图片可以看出,如果一个查询只想查询字段A的值,代价是读取所有的页面,包括了不需要的字段B,C,D,E。
与行存储模式相比,使用列存储只需要读取单独的列数据,这样可以减小IO的消耗,同时提供缓存的使用。
但是列存储索引是如何在磁盘存储的?如果我们只是将列的数据存储在一起,如何在查询的时候重新创建成行数据。
举个例子:如果字段“名称”存储了“Kevin”和“Allen”两个值,“生日”栏位存储了“19650112”和“”19680415“。那么我们在查询的时候如何能够将Kevin和生日匹配起来。
答案是数据的位置标明它属于哪一行。因此在“名称”字段中行1存储了“Kevin “,在“生日”栏位中第一行对应的存储了“19650112“。依次类推,这样查询的时候就可以将所有的栏位匹配为对应的行。
相关文章推荐
- Column store index 列数据如何匹配成行数据?
- Column store index 列数据如何匹配成行数据?
- android 如何将imageCursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_KEY)中的到的专辑封面放入view中显示
- SQL Server ->> ColumnStore Index(列存储索引)
- 初次尝试ColumnStore Index
- [svc]二三层数据格式&&三层数据如何匹配路由
- 如何将多个数据的- 转为:来匹配josn格式
- 在vuex的store中如何正确的通过axios进行请求操作获取数据
- 浅述SQL Server的聚焦强制索引查询条件和Columnstore Index
- 如何得到DropDownDW子数据窗口中Display Column的内容
- SQL Server 2012中的ColumnStore Index尝试
- 請問EXT GRID 如何通過rowIndex和columnIndex改變列內容?
- ext6.2 store如何更新数据刷新
- Java中如何在循环中的把已经匹配好不在参与下次循环中,而且数据不能丢失了
- 如何把Ext.data.store里的数据一次性用JSON传给后台(添加了后台解析部分)
- SQL SERVER 2012 COLUMNSTORE INDEX - 之一
- 【Excel】如何将第二列的数据与第一列的匹配并将其数据放到与第一列对应的行(VLOOKUP)
- 在C#中如何使用正式表达式获取匹配所需数据
- 如何把store里的所有数据转换成JSON传给后台
- SQL SERVER 2012 COLUMNSTORE INDEX - 之二