非聚集索引中是否有主键?

Jes*_*lam 3 sql t-sql sql-server-2005

为了尝试为我的数据库做出最好的索引选择,我注意到了一些我想要解决的特定行为.

观察下表和相应的索引(SQL Server 2005):

CREATE TABLE demo
(
 id INT PRIMARY KEY IDENTITY,
 name NVARCHAR(50) NOT NULL,
 password BINARY(20) NOT NULL
);

CREATE NONCLUSTERED INDEX idx_demo_foo ON demo ( name, password );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我执行以下查询...

SELECT id FROM demo
WHERE name = @0
AND   password = @1;
Run Code Online (Sandbox Code Playgroud)

...仅发生非聚集索引查找.这让我很奇怪,因为我没有明确地将id添加到非聚集索引.

Ste*_*ass 6

聚簇索引键始终包含在非聚簇索引中.聚簇索引键是表的行定位符,每个索引必须包含行定位符,以便将索引行与表行匹配.