Column store index 列数据如何匹配成行数据?
SQL?Server?2012引入了列存儲(chǔ)索引,對(duì)每列的數(shù)據(jù)進(jìn)行分組和存儲(chǔ),然后聯(lián)接所有列以完成整個(gè)索引。這不同于傳統(tǒng)索引,傳統(tǒng)索引對(duì)每行的數(shù)據(jù)進(jìn)行分組和存儲(chǔ),然后聯(lián)接所有行以完成整個(gè)索引。
在訪問基于行存儲(chǔ)的索引時(shí),如果要查詢一個(gè)字段需要將整個(gè)Page讀入內(nèi)存,所以默認(rèn)會(huì)讀到所有行的數(shù)據(jù):
通過上面的圖片可以看出,如果一個(gè)查詢只想查詢字段A的值,代價(jià)是讀取所有的頁面,包括了不需要的字段B,C,D,E。?
?
與行存儲(chǔ)模式相比,使用列存儲(chǔ)只需要讀取單獨(dú)的列數(shù)據(jù),這樣可以減小IO的消耗,同時(shí)提供緩存的使用。
但是列存儲(chǔ)索引是如何在磁盤存儲(chǔ)的?如果我們只是將列的數(shù)據(jù)存儲(chǔ)在一起,如何在查詢的時(shí)候重新創(chuàng)建成行數(shù)據(jù)。
?
舉個(gè)例子:如果字段“名稱”存儲(chǔ)了“Kevin”和“Allen”兩個(gè)值,“生日”欄位存儲(chǔ)了“19650112”和“”19680415“。那么我們?cè)诓樵兊臅r(shí)候如何能夠?qū)evin和生日匹配起來。
?
答案是數(shù)據(jù)的位置標(biāo)明它屬于哪一行。因此在“名稱”字段中行1存儲(chǔ)了“Kevin?“,在“生日”欄位中第一行對(duì)應(yīng)的存儲(chǔ)了“19650112“。依次類推,這樣查詢的時(shí)候就可以將所有的欄位匹配為對(duì)應(yīng)的行。
?
?
轉(zhuǎn)載于:https://blog.51cto.com/lzf328/1252919
總結(jié)
以上是生活随笔為你收集整理的Column store index 列数据如何匹配成行数据?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 自定义按钮实现 home
- 下一篇: UNIX网络编程——TCP/IP简介