我对列存储索引感到困惑。
什么是列存储索引,它与聚集索引和非聚集索引有何不同?
最佳答案
假设您有一个如下表,其中包含 col1
作为主键:
普通索引将“按行”(每行)存储,因此单个给定行的所有列都驻留在单个页面上(假设一个页面只能容纳一行):
因此,当您想要跨多行读取某些内容时,例如与 SUM(col3)
,SQL Server 需要读取第 1 页和第 2 页才能交付,这是本示例中读取的两个页面的总“成本”。
使用列存储索引,相同的数据将“按列”存储在每列页面中:
这意味着如果您想做同样的事情SUM(col3)
与之前相比,SQL Server 现在只需读取一页(第 3 页),而不是像以前那样读取两页。
列存储索引为以列为中心的查询提供了明显的优势,因为它们允许处理引擎使用更少的内存和 I/O 来减少不需要的数据读取。
因此,在频繁运行此类查询的大型表中,适当的列存储索引的性能优势可能是巨大的(根据 the Microsoft SQL docs 高达 10 倍的性能和数据压缩增益)。
关于sql-server - 什么是列存储索引以及与聚集索引和非聚集索引有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39828638/