嵌套循環連接(Nested Loops), 合併聯接(Merge), 哈希聯接(Hash)的適用情況

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

作者:BobLiu 
郵箱:[email protected]
出處:http://www.cnblogs.com/liuzhendong
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章