0
對於其優化過程,它與結果較大的關係還是結果較小的關係?自然連接3個關係哪個順序給出更好的性能?
對於其優化過程,它與結果較大的關係還是結果較小的關係?自然連接3個關係哪個順序給出更好的性能?
這太長了評論。
首先。請勿使用NATURAL JOIN
。這是一個等待發生的錯誤。 NATURAL JOIN
使用恰好與JOIN
鍵名稱相同的字段。它甚至不考慮公佈的外鍵關係。
你今天可以寫一個查詢,而對基礎表的小改動可以完全破壞查詢(我承認,這也可能以其他方式發生)。但令人痛心的是,在查詢中邏輯不可見。因此改用USING
或ON
。
其次,大多數數據庫都有一個優化階段。這個階段決定了處理的最佳順序。所以,即使更改訂單也沒有效果 - 因爲數據庫引擎決定訂單(除非您用提示覆蓋它)。
感謝您的解釋!我明白現在它是如何工作的。那麼大多數數據庫如何確定其優化的順序? – RhumB
它是如何確定的?它查看錶統計信息,索引,緩存,內存和各種事物,並試圖找出返回數據的最快方法。如果一個索引指出例如表X上的過濾將導致後續聯接的記錄大量減少,那麼它可能會首先執行該操作。基本上所有你需要知道的是,一個數據庫將盡可能快地給出正確的結果。您可以使用十幾種不同的方式編寫相同的功能查詢,並且在幕後的大部分時間您都會得到一個完全相同的查詢計劃,而不管您將事物放在什麼位置 –