SQL 服务器会使用带非聚集索引的合并连接还是仅需要聚集索引的合并连接?

Would SQL Server use Merge Join with Non clustered index or Merge join need Clustered Index only?

我只是想知道 SQL 服务器是否可以选择使用 MERGE JOIN 如果两个表都有 Non Clustered Index 连接列并且包含在 SELECT 列表中的列也是非聚集索引的一部分。

我知道 MERGE JOIN 的先决条件是必须对联接列进行排序。这是否意味着只有聚簇索引?

是的,它可以使用非聚集索引执行合并连接而无需显式排序步骤,只要键列的顺序确保连接谓词中使用的列处于所需的排序顺序即可。

非聚集索引可用于执行合并连接。唯一的先决条件是连接列与索引列顺序匹配。

试试这个。

DROP TABLE snapshot 
CREATE TABLE snapshot (id int identity(1,1) primary key clustered ,batchid INT,sqltime DATETIME)

INSERT INTO snapshot(sqltime,batchid) VALUES('2015-03-26 08:20:54.077', 1),
('2015-03-26 08:20:54.077', 1 ),
('2015-03-26 08:20:54.077', 1),
('2015-03-26 08:20:54.077', 1),
('2015-03-26 08:20:54.077', 1),
('2015-03-26 08:22:54.077', 2),
('2015-03-26 08:22:54.077', 2),
('2015-03-26 08:22:54.077', 2),
('2015-03-26 08:22:54.077', 2),
('2015-03-26 08:26:54.077', 3),
('2015-03-26 08:26:54.077', 3)


CREATE NONCLUSTERED INDEX IX_snapshot_Non_Clustered ON snapshot(batchid)include(sqltime)

SELECT * FROM snapshot s1 INNER MERGE JOIN snapshot s2 on S1.batchid = s2.batchid

在上述查询的执行计划中,您可以看到 Merge Join 在非聚集索引上,而不是在 id 上的聚集索引上。