執行SQL:
以下是引用片段: Select * From P_Order A Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo |
如果兩張表都沒有任何索引,則兩張表都要進行全表掃描。所有的數據都要讀入內存頁。
邏輯讀數近似等于兩張表的數據頁總和。SQL Server處理過程中將使用到臨時表。
只有一張表有聚集索引的情形類似,SQL Server處理過程中將使用到臨時表。并且讀入所有的數據頁到內存。
如果兩張表都有聚集索引,盡管兩表的數據都會被讀入內存頁,但邏輯讀數已經大大減少,等于其中一張表總數據內存頁數加上最終輸出的數據頁數。而且SQL Server處理過程中將不需要再使用臨時表。
5.2 執行高選擇性選取
對于這樣的高選擇性SQL語句,SQL Server 將提示無法生成執行計劃。
以下是引用片段: Select * From P_Order A Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo Where A.MobileNo=28913 |
但可以執行:
以下是引用片段: Select * From P_Order A Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo Where A.MobileNo<=28001 (注:最終結果只有2條) |
這樣的屬于低選擇性語句,但最終結果也很少的語句。如前面所述,這種情況下,采.netsted loop聯接效率可能更高。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/