索引的列包含所有PK。效率不高?

时间:2018-01-25 07:03:37

标签: database indexing

例如, TABLE_Aabc列。 a是PK并编入索引PK_TABLE_A。并且有一个名为IDX_TABLE_A的索引按顺序包含ba

SELECT a, b
FROM TABLE_A
WHERE a = @P1 AND b = @P2

此查询将使用PK_TABLE_Ab谓词将被忽略。

SELECT a, b
FROM TABLE_A
WHERE b = @P2

此查询将使用IDX_TABLE_A。但a并不需要编入索引。成为included column会更有效率。

是否有任何合理的案例IDX_TABLE_A索引a列?

1 个答案:

答案 0 :(得分:1)

通过允许直接从索引记录中检索这些列的值,而不遵循从索引记录到表的引用,在索引中包含无助于查找特定行的列仍然可以提高查询的性能记录以获得它们。所选列都包含在一个(或多个)索引中的查询称为“覆盖”查询;索引“覆盖”所有需要的列,数据库不需要访问表行本身来构建查询结果。

TABLE_A中的(b,a)索引可能存在,以加快与b匹配的查询,或者可能同时加上b和a(这些可能是精确匹配,范围匹配或其他类型),并希望快速返回只有查询结果中的b和a的值,而不是列c的值。