ON 子句和 INCLUDE 子句中指定列的索引声明差异
Posted
技术标签:
【中文标题】ON 子句和 INCLUDE 子句中指定列的索引声明差异【英文标题】:Difference in index declaration between specifying columns in ON clause and in INCLUDE clause 【发布时间】:2020-02-19 18:49:52 【问题描述】:只是想知道索引。这对我来说是一个相当新的概念,我看不出在 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%';
这两个索引的行为有何不同?在什么情况下使用哪个?
【问题讨论】:
更多阅读请见covering index。 【参考方案1】:不同的是included
列在索引中没有排序;它们不属于索引树,它们只是添加到叶子中。
所以这基本上意味着两件事:
索引有点小,维护它的开销也更少
如果包含的列用于过滤(如在连接的where
子句、on
子句或group by
子句中)或用于排序(如在order by
子句);仅当列仅在 select
子句中使用时才有用,因此当您需要 覆盖 索引时,这很方便)
包含列有用的情况并不多,除非您正在进行高级优化。通常,您需要常规列键。
【讨论】:
谢谢。对于未来的寻求者,这里有更多关于这个话题的信息:***.com/questions/1307990/…以上是关于ON 子句和 INCLUDE 子句中指定列的索引声明差异的主要内容,如果未能解决你的问题,请参考以下文章
Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列