查看执行计划,我在输出列表中看到“列A”。该操作是对非聚集索引的索引扫描:“ IX_name”
当我看到此索引的定义时。在“索引键”列或“包含”列中都看不到“ A列”。
如何使用非聚集索引来输出索引中不存在的列。它不应该在表或其他带有“ A列”的索引上使用“表扫描”。
如果表本身是集群1,那么所有二级索引都包含集群键2的副本(该键确定集群表中行的物理顺序)。
原因:群集表中的行实际上存储在B树中(而不是表堆中),因此当B树节点被拆分或合并时可以 移动 ,因此二级索引不能仅包含行“指针”(因为行移动后有“悬挂”的危险。
通常,这会对性能产生不利影响3-通过二级索引查询可能需要 仔细查询 :
但是,如果您只需要聚类键的字段,则仅需要第一次查找。
MS SQL Server下有 1个Aka“聚集索引”。
2 通常,但不一定是MS SQL Server下的PRIMARY KEY。
3 不幸的是,默认情况下,MS SQL Server下的群集处于打开状态- 人们通常只是在没有充分考虑其影响的情况下保留默认设置。如果不适合使用群集,则应显式指定NONCLUSTERED关键字以将其关闭。