SQL Server 2017内存优化表带包含列哈希索引创建语法问题
问题原因与正确语法
- 报语法错误的根本原因是SQL Server 2017 内存优化表的哈希索引根本不支持
INCLUDE子句,你套用磁盘表索引的写法本身就不符合内存优化表的索引语法规则,SSMS标红是正常的。 - 不要用磁盘表的索引逻辑套内存优化表:内存优化表的所有索引(哈希索引、内存优化非聚集索引)默认就隐式包含表内的全部列,天生就是覆盖索引,根本不需要手动指定包含列。查询时只要命中索引,就可以直接拿到所有需要的非键列数据,不存在磁盘表那种需要回表、需要手动加INCLUDE列优化覆盖的场景。
- 你要重建这个索引,只需要删掉
include (Col3, Col4)这一行即可,正确执行语句如下:
ALTER TABLE TableName ADD INDEX IndexName HASH (Col1, Col2) WITH (BUCKET_COUNT = 1048576);
- 补充说明:哪怕是后续版本新增的内存优化表列存索引,也同样不支持
INCLUDE语法,默认覆盖全表列。你之前留存的索引字段清单里列出来的Col3、Col4,应该是当时建索引时记录的查询常用覆盖列,不是索引语法里显式写的INCLUDE列,不需要在创建语句里额外声明。
内容的提问来源于stack exchange,提问作者GlennD
相关产品推荐
相关产品推荐

