MSSQL ColumnStore 索引 - 常规索引的使用

Posted

技术标签:

【中文标题】MSSQL ColumnStore 索引 - 常规索引的使用【英文标题】:MSSQL ColumnStore index - use of conventional indexes 【发布时间】:2020-01-14 09:19:15 【问题描述】:

如果这是一个简单的问题,请原谅我,但我似乎找不到任何明确的答案,并认为我会在这里发布。

如果我有一个创建了列存储索引的表,我还需要常规索引吗?

在我的示例中,我有一个包含 12 亿条记录的非常大的表

它有一个列存储索引,定义如下:

CREATE CLUSTERED COLUMNSTORE INDEX [IDX_123] 
   ON [dbo].[XXX] 
   WITH (DROP_EXISTING = OFF, COMPRESSION_DELAY = 0)

除此之外,咨询公司还在表中的每一列上创建了一个额外的非聚集行存储索引:我们有 30 个,即 30 个额外的索引                                                                     

从我的测试看来,优化器似乎只是使用列存储索引而忽略了行存储索引,我的问题是这些是否是必需的?

【问题讨论】:

请查看文档 - docs.microsoft.com/en-us/sql/relational-databases/indexes/… 【参考方案1】:

不是这样,列存储索引可以代替表扫描或索引扫描运算符中的行基索引,如果查询需要索引查找,它将使用行基索引

【讨论】:

以上是关于MSSQL ColumnStore 索引 - 常规索引的使用的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将任何“特定列”索引添加到使用“CLUSTERED COLUMNSTORE”选项创建的 SQL Server 表中?

使用 MariaDB 引擎 ColumnStore 的慢速 CREATE TABLE

MariaDB ColumnStore调研

MSSQL里面建索引的问题

MariaDB ColumnStore一些限制和BUG总结

MSSQL之八 实现视图与索引