小编典典

非聚集索引如何输出索引中不包含的列

sql

查看执行计划,我在输出列表中看到“列A”。该操作是对非聚集索引的索引扫描:“ IX_name”

当我看到此索引的定义时。在“索引键”列或“包含”列中都看不到“ A列”。

如何使用非聚集索引来输出索引中不存在的列。它不应该在表或其他带有“ A列”的索引上使用“表扫描”。


阅读 161

收藏
2021-04-07

共1个答案

小编典典

如果表本身是集群1,那么所有二级索引都包含集群键2的副本(该键确定集群表中行的物理顺序)。

原因:群集表中的行实际上存储在B树中(而不是表堆中),因此当B树节点被拆分或合并时可以 移动
,因此二级索引不能仅包含行“指针”(因为行移动后有“悬挂”的危险。

通常,这会对性能产生不利影响3-通过二级索引查询可能需要 仔细查询

  • 首先,搜索二级索引并获取聚类键。
  • 其次,根据上面检索到的聚类键,搜索聚簇表本身(即B树)。

但是,如果您只需要聚类键的字段,则仅需要第一次查找。


MS SQL Server下有 1个Aka“聚集索引”。

2 通常,但不一定是MS SQL Server下的PRIMARY KEY。

3 不幸的是,默认情况下,MS SQL Server下的群集处于打开状态-
人们通常只是在没有充分考虑其影响的情况下保留默认设置。如果不适合使用群集,则应显式指定NONCLUSTERED关键字以将其关闭。

2021-04-07