谁能解释一下这两个 - 索引Key列 VS 索引Included Column?
目前,我的索引有 4 个索引键列和 0 个包含列,我想知道两者之间的区别。
索引键列是索引 B 树的一部分。包含的列不是。
取两个索引:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
更适合这种查询:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Whereas index2
更适合这种查询:
SELECT col2, col3 FROM table1 WHERE col1 = x
在第一个查询中,index1
提供了一种快速识别感兴趣的行的机制。该查询(可能)将作为索引查找执行,然后进行书签查找以检索完整行。
在第二个查询中,index2
充当覆盖索引。 SQL Server 根本不需要访问基表,因为索引提供了满足查询所需的所有数据。index1
在这种情况下也可以充当覆盖索引。
如果您想要覆盖索引,但不想将所有列添加到 b 树,因为您不查找它们,或者因为它们不是允许的数据类型(例如 XML)而不能查找它们,请使用INCLUDE 子句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)