SQL索引性能,哪个更好?

时间:2016-07-29 13:32:30

标签: sql-server performance indexing rdbms

从性能角度看,以下SQL是好还是坏?

两个查询,按公共列搜索:

CREATE INDEX tbl_idx ON tbl (a, b);

SELECT id, a, b
 FROM tbl
WHERE a = @a
  AND b = @b;


SELECT id, a, b
 FROM tbl
WHERE b = @b;

2 个答案:

答案 0 :(得分:2)

如果反转索引列顺序(b,a),则索引可能对两个查询都有用。此外,如果id是作为聚簇索引实现的主键,则索引将涵盖两个查询,因为聚类键隐式包含在行定位器中。否则,可以明确地将id添加为包含列以提供最佳性能:

CREATE INDEX tbl_idx ON tbl (a, b)
INCLUDE(id);

答案 1 :(得分:2)

此索引

CREATE INDEX tbl_idx ON tbl (a, b);

对这些查询有用

where a= and b =  
where a= and b>
where a like 'someval%' and b=

但对这些查询没有用处:

    where b=
    where a> and b=
    where a like '%someval%' and b=
    where isnull(a,'')= and b=

总之,在多列索引中,如果SQL Server能够在第一个键列上执行搜索,那么索引将是有用的。

提出您的问题,第一个查询将受益于您创建的索引,而第二个查询可能倾向于对此索引进行扫描..

有许多因素决定了搜索是好还是坏。在某些情况下,SQL Server可能倾向于不使用可用的索引,如书签查找成本超出限制。

参考文献: