SQL 服务器索引中的两列但仅查询一列

SQL Server two columns in index but query on only one

在遗留代码中我找到了如下索引:

CREATE CLUSTERED INDEX ix_MyTable_foo ON MyTable
(
    id ASC,
    name ASC
)

如果我理解正确的话,这个索引对于单独查询 id 列或 idname 列很有用。我说的对吗?

因此它可能会通过以下方式改进记录检索:

select someColumn from MyTable where id = 4

但它对这个查询没有任何作用:

select someColumn from MyTable where name = 'test'

是的,你是对的。但是如果你的 table 有很多列:

A
B
C
D
..
F

例如,您的主键索引是 (A),如果您有第二个索引,例如 (B,C),如果您使用这样的查询,引擎可能会决定使用它:

CREATE TABLE dbo.Whosebug
(
    A INT
   ,B INT 
   ,C INT 
   ,D INT 
   ,E INT
   ,PRIMARY KEY (A)
   ,CONSTRAINT IX UNIQUE(B,C)
)

SELECT A     
      ,C 
FROM dbo.Whosebug
WHERE C = 0;

因此,如果索引可以用作 covering,即使您对某些列不感兴趣,引擎也可能会使用它,因为它会决定执行更少的工作(更少的读取) .

在您的情况下,id 列上的 PK 似乎是与 name 列上的第二个索引相结合的更好选择。