2012-12-10 108 views
3

我無法理解不同的連接算法(嵌套循環連接,合併連接,索引連接,散列連接和其他變體)以及如何/何時使用它們。更具體地講,我一直在問畫出查詢樹下面的查詢的最高效的執行:查詢優化 - 連接算法

SELECT E.Name 
FROM Employee E, Department D, Works_On W, Project P 
WHERE E.DNO = D.DNO and E.SSN = W.ESSN and P.PNUM = W.PNUM and 
    P.Budget > 50 and E.Sex = 'M' and E.Hobby = 'Yodeling' and 
    D.DName = 'Rational Mechanics'; 

我可以提供的模式,如果它需要;基本上,四個表都

員工(SSN,姓名,DNO - 部門數,工資,性別),
部(DNO,DNAME,預算,位置,MGRSSN),
Works_On(ESSN,PNUM - 項目編號),
項目(PNum,PName,預算,位置,目標)。

我畫了一個左深連接樹,我不知道每個連接使用哪個算法。 如果我可以解釋何時使用每種算法或解釋它的資源指針,那將是非常有用的。

編輯:我不是問如何在sql中指定不同的連接,只關於一般的連接。此外,我沒有被告知任何表格都被索引,但我被告知我可以索引來做索引加入。我還給出了啓發式查詢樹的統計數據,我用它來構造樹的結構。

+1

我不完全明白你的問題。你只是想了解不同的連接方法,或者你想學習如何強制給定的SQL引擎使用更好/更有效的連接方法,或者你是否必須編寫自己的查詢引擎?順便說一句,你應該將可用的索引添加到模式中,因爲它對最終結果影響很大。或者也許我是一架直升機。 – biziclop

+0

MSDN是這個信息的好資源。 http://technet.microsoft.com/en-us/library/ms191426(v=sql.105).aspx – Zeph

+0

您可以通過使用適當的連接語法開始學習連接,而不是隱式連接,條件爲'where'條款。 –

回答

1

msdn是一個很好的資料,這個信息。 technet.microsoft.com/en-us/library/ms191426(v=sql.105).aspx

正是我所需要的。謝謝,Zeph!

3

通常,您希望將其留給數據庫系統以選擇最佳查詢執行計劃,從而實現最佳連接算法。它取決於有關表的可用索引和統計數據(例如它們包含多少行以及一行包含多少個不同值)。此外,連接算法還取決於數據庫系統特定的事情,例如實施了哪些算法,數據是使用聚簇還是索引組織表等存儲的。

僅當您的查詢異常緩慢或已被識別爲應用程序瓶頸會影響執行計劃。

根據可用信息,無法確定最佳執行計劃。

+1

它也取決於硬件(處理器和內存配置的數量)以及有關數據的信息。 –