2012-03-28 44 views
4

列存儲索引的優點之一是單列數據「彼此相鄰存儲在磁盤上」。這代表更好的壓縮和更快的讀取時間。SQL Server 2012:性能列存儲索引與B樹

但是;當使用B樹(一個常規的非聚集索引)時,不是樹的葉子數據本身?因此,當我在列A上創建索引時,列A中的所有字段都不會與磁盤平行排列在磁盤上嗎?這意味着數據可以被壓縮並且可以被快速讀取。

所以簡而言之:當一個列存儲索引的性能比單個列上的B樹更高時?

在此先感謝!

回答

1

因此,當我在列A上創建索引時,列A 的所有字段都不會顯示在磁盤上與表並行排序?

是的,列A將被排序。但所有其他列不會。列存儲索引按排序順序存儲所有列(大小爲2^20行)。

+0

好的。但是,當您從列A中選擇某項內容時,無論哪種情況,A的所有數據都會被排序。那麼我是否可以假設在查詢其他列時列存儲索引更高效? 但是當我簡單地在這些列上放置一棵B樹時呢? – Gurdt 2012-03-29 07:16:37

+0

當您需要排序數據時,B-Tree根本不需要排序操作(如果您請求的列是索引的前綴)。列存儲無法對它們進行排序,因爲它將它們存儲在每2^20行中。如果您有多個此類細分,則無法提供排序順序。 – usr 2012-03-29 08:28:38

+0

我想這裏可能會有一些誤解。 列存儲索引的目的是(或者我認爲),從磁盤讀取數據的開銷較小,因爲只能加載相關的列。當從一個行存儲裝載時,一個整體讀取行,因此加載可能不需要的列。 現在的情況如下:如果我只對一列感興趣,比如A,那麼與簡單的B樹(非聚集索引)相比,列存儲索引如何能夠更高效。非聚集索引的葉子實際上存儲爲一列,場後場,儘可能緊湊。 – Gurdt 2012-03-29 08:43:30