[英]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.