1.嵌套循環連接(Nested Loops)適用範圍
兩個表, 一個叫外部表, 一個叫內部表.
如果外部輸入非常小,而內部輸入非常大並且已預先建立索引,那麼嵌套循環聯接將特別有效率。
關於連接時哪個表爲outer表,哪個爲inner表,我發現sql server會自動給你安排,和你寫的位置無關,它自動選擇數據量小的表爲outer表, 數據量大的表爲inner表。
2.合併聯接(Merge)
指兩個表在on的過濾條件上都有索引, 都是有序的, 這樣, join時, sql server就會使用Merge join, 這樣性能更好.
如果一個有索引,一個沒索引,則會選擇Nested Loops join.
3.哈希聯接(Hash)
如果兩個表在on的過濾條件上都沒有索引, 則就會使用Hash join.
也就是說, 使用Hash join算法是由於缺少現成的索引.
參考資料:
Inside SQL server 2008 T-SQL.
高級查詢優化概念
http://msdn.microsoft.com/zh-cn/library/ms191426(v=SQL.100).aspx