我正在尝试替换嵌套循环以合并无强制选项的连接,我已经给出了表数据和查询以下谢谢。
N_ID S_NAME DEPT
1 NAME1 DEPT1
2 NAME2 DEPT2
3 NAME3 DEPT3
N_ID S_CITY PHONE
1 CITY1 PHONE1
2 CITY2 PHONE2
3 CITY3 PHONE3
我已创建如下索引:
CREATE NONCLUSTERED INDEX IX_NC ON TBL1(N_ID)
INCLUDE (S_NAME)
CREATE NONCLUSTERED INDEX IX_NC ON TBL2(N_ID)
SELECT A.N_ID,S_NAME FROM TBL1 A
INNER JOIN TBL2 B ON A.N_ID=B.N_ID;
这是我的执行计划:
答案 0 :(得分:2)
除非你有理由强制使用嵌套循环进行合并连接,否则我不建议这样做..
SQLServer内部将连接实现为三个运算符
1.嵌套循环
2.Hash
3.Merge
每个都有自己的优势,并且不可能说,一个连接比其他连接更好.SQL可以根据许多因素选择任何连接,总体而言,它选择一个成本更低的计划......
提出你的问题,按照文件......
在..时选择嵌套循环
如果一个连接输入很小(少于10行)并且另一个连接输入相当大并且在其连接列上建立索引,则索引嵌套循环连接是最快的连接操作,因为它们需要最少的I / O和最少的比较
MSDN也解释了嵌套循环连接有效的情况。
如果外部输入很小并且内部输入是预索引且大,则嵌套循环连接特别有效。在许多小事务中,例如仅影响一小组行的事务,索引嵌套循环连接优于合并连接和散列连接。
因此,除非您以这种方式强制提示并设计数据,否则SQL会选择合并连接。在您的情况下无法进行合并
参考文献:
https://msdn.microsoft.com/en-us/library/ms191426(v=sql.100).aspx