SQL幾種物理查詢邏輯
最近在查一個案例,使用者反應在查一個員工數比較少的請假資料的時候會出現錯誤畫面,查員工數較多的公司別的時候反而很快的就查詢出來了,當下一開始的直覺可能是資料面有問題,因此打開程式執行後發現該錯誤為ASP.NET畫面查詢SQL時等待過久timeout所導致,但這問題就來了,為何資料比較少查詢反而會timeout,資料較多的反而不會。 跟同事一起討論後大家一開始都覺的是Index的關係,因此就開始往錯誤的Index去查,結果查出了大學問(小弟我SQL方面的功力很破請見諒)。原來SQL Server在處理Join的時後,會跟據Join table的資料量、索引等…來決定使用不同的實體處理模式,SQL Server本身共有三種物理連接方式,【巢狀迴圈(Nested Loops)】、【合併聯結(Merge Join) 】、【雜湊比對(Hash Match)】。下面先簡單的說明三種連結的處理原則。