繁体   English   中英

在 ON 子句和 INCLUDE 子句中指定列之间的索引声明的差异

[英]Difference in index declaration between specifying columns in ON clause and in INCLUDE clause

只是想知道索引。 这对我来说是一个全新的概念,我看不出在 ON 子句和 INCLUDE 子句中声明列之间的区别。 下面的例子应该可以解释这个问题:

CREATE INDEX ix_client_info1
ON dbo.client(name, age, city)
WHERE name = 'A%';

CREATE INDEX ix_client_info2
ON dbo.client(name)
INCLUDE(age, city)
WHERE name = 'A%';

这两个索引在行为上有何不同? 在什么情况下使用哪个?

不同之处在于included列在索引中没有排序; 它们不属于索引树,它们只是添加到叶子中。

所以这基本上意味着两件事:

  • 索引更小,维护它的开销也更少

  • 如果包含的列用于过滤(例如在where子句、连接的on子句或group by子句中)或用于排序(例如在order by子句中),则索引将无济于事; 它仅在列仅在select子句中使用时才有用,因此当您需要覆盖索引时这很方便)

包含列有用的情况并不多,除非您正在进行高级优化。 通常,您需要常规的列键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM