SQL 索引性能 , 哪个更好?

SQL Index performance ,, which is better?

从性能的角度来看,以下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;

如果颠倒索引列顺序(b,a),那么索引可能对两个查询都有用。此外,如果 id 是作为聚簇索引实现的主键,则该索引将覆盖这两个查询,因为聚簇键被隐式包含为行定位器。否则,可以将 id 显式添加为包含的列以提供最佳性能:

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

这个指数

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 服务器能够在第一个键列上进行查找,那么索引将很有用..

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

有很多因素决定搜索是否良好或 bad.In 在某些情况下 SQL 服务器可能倾向于不使用可用的索引,例如书签查找成本超过限制..

参考文献: