T-SQL如下:
select T1.sno from [MAY_BLACKFISH].dbo.MVS_PARTS_LOG T1 join (
select top 5 sno from Z_result order by sno
) T2 on T1.sno=T2.sno
where T1.TypeName='LCM'
其中MVS_PARTS_LOG爲KW級TABLE, Z_result 只有幾百筆記錄;相關索引都已經建立。
調試的時候發現一點很奇怪, 當把top 5 改成top 4, 則一切OK, 1秒內完成查詢;恢復成top 5時則幾十秒還沒出結果。
比對兩者執行計劃,一致的。
細看執行計劃, 發現有一個convert(char(12),...的轉換, 原來這裏JOIN條件中T1.sno是char(12), 而T2.sno是nvarchar(12), MSSQL強制加了一個convert轉換, 導致on條件不能滿足SARG的形式。
將Z_result的sno也改成char(12)後, 問題解決。
關於索引, 以及SARG的形式可以參考http://blog.csdn.net/lewisshi/archive/2009/01/13/3765153.aspx