例如,
TABLE_A
有a
,b
,c
列。
a
是PK并编入索引PK_TABLE_A
。并且有一个名为IDX_TABLE_A
的索引按顺序包含b
,a
。
SELECT a, b
FROM TABLE_A
WHERE a = @P1 AND b = @P2
此查询将使用PK_TABLE_A
,b
谓词将被忽略。
SELECT a, b
FROM TABLE_A
WHERE b = @P2
此查询将使用IDX_TABLE_A
。但a
并不需要编入索引。成为included column
会更有效率。
是否有任何合理的案例IDX_TABLE_A
索引a
列?
答案 0 :(得分:1)
通过允许直接从索引记录中检索这些列的值,而不遵循从索引记录到表的引用,在索引中包含无助于查找特定行的列仍然可以提高查询的性能记录以获得它们。所选列都包含在一个(或多个)索引中的查询称为“覆盖”查询;索引“覆盖”所有需要的列,数据库不需要访问表行本身来构建查询结果。
TABLE_A中的(b,a)索引可能存在,以加快与b匹配的查询,或者可能同时加上b和a(这些可能是精确匹配,范围匹配或其他类型),并希望快速返回只有查询结果中的b和a的值,而不是列c的值。