列存储索引和低选择性列

u23*_*534 6 sql-server columnstore sql-server-2014

我有一个几乎有 1T 行的表。

create table bigtable (
  K1 int, K2 date, -- PK columns
  C1 ..., C8 ...., -- columns with various data types like float, date, varchar, ...
  B1 bit, B2 bit, ......, B10 bit -- 10 or so bit columns
  primary key (K1, K2)
)
Run Code Online (Sandbox Code Playgroud)

我想使用列存储来提高查询性能。有以下选项。

  1. 创建集群列存储索引
  2. 为所有列创建一个非聚集列存储索引
  3. 为除这些位列和其他低选择性列之外的所有列创建一个较小的非聚集列存储索引?

用户将自己编写查询。许多查询将是聚合查询。选项 3 的运行速度是否与其他两个尺寸较小的选项一样快?

我正在使用 SQL Server 2014。在我的情况下,我可以定期删除/重新创建非聚集列存储索引,因为数据不经常更新。

men*_*osi 1

列存储索引的一个很好的功能是只读取必需的列(与读取整行的行存储不同)。

因此,如果将所有列包含在非聚集索引中,创建索引将花费更长的时间,但不会对任何查询产生不利影响(并且将使使用这些列的任何查询受益)。