【问题标题】:How to ignore the columns as part of columnstore index that cannot be participated because of data type issues如何忽略由于数据类型问题而无法参与的列存储索引中的列
【发布时间】:2017-10-03 03:11:58
【问题描述】:

我有一个现有的表,其中包含 100 多列。现在我正在尝试在同一个表上创建一个聚集列存储索引,但它会抛出一个错误,因为某些列由于限制不符合数据类型标准。有没有办法忽略不符合聚集列存储索引要求的列。谢谢。

SQL for creating CCSI :-



CREATE CLUSTERED COLUMNSTORE INDEX CCSI 
ON [Dbname].[dbo].[testtable] 
WITH ( DROP_EXISTING = OFF );

Error :-

The statement failed. Column 'Column1' has a data type that cannot participate in a columnstore index. Omit column 'Column1'.

【问题讨论】:

  • 无论何时创建列存储索引,都不得包含列存储索引不支持的数据类型的任何列 - raresql.com/tag/…

标签: sql sql-server indexing sql-server-2012 clustered-index


【解决方案1】:

在使用聚集列存储索引时不能忽略列。对于选定的列,您必须使用非聚集列存储索引,如下所示:

CREATE NONCLUSTERED COLUMNSTORE INDEX CCSI 
ON [Dbname].[dbo].[testtable] (Col1, Col2...required columns)
WITH ( DROP_EXISTING = OFF );

【讨论】:

  • 我正在遍历一个表列表,并希望编写我的通用解决方案,而不是对列进行硬编码。每个表都有自己的列。
  • 您可能需要使用 sys.columns 为该表迭代所有列名并生成它,因为无法排除聚集列存储索引中的列
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2017-04-12
  • 2011-09-27
  • 2014-08-21
相关资源
最近更新 更多