2016-04-14 35 views

回答

2

這太長了評論。

首先。請勿使用NATURAL JOIN。這是一個等待發生的錯誤。 NATURAL JOIN使用恰好與JOIN鍵名稱相同的字段。它甚至不考慮公佈的外鍵關係。

你今天可以寫一個查詢,而對基礎表的小改動可以完全破壞查詢(我承認,這也可能以其他方式發生)。但令人痛心的是,在查詢中邏輯不可見。因此改用USINGON

其次,大多數數據庫都有一個優化階段。這個階段決定了處理的最佳順序。所以,即使更改訂單也沒有效果 - 因爲數據庫引擎決定訂單(除非您用提示覆蓋它)。

+0

感謝您的解釋!我明白現在它是如何工作的。那麼大多數數據庫如何確定其優化的順序? – RhumB

+0

它是如何確定的?它查看錶統計信息,索引,緩存,內存和各種事物,並試圖找出返回數據的最快方法。如果一個索引指出例如表X上的過濾將導致後續聯接的記錄大量減少,那麼它可能會首先執行該操作。基本上所有你需要知道的是,一個數據庫將盡可能快地給出正確的結果。您可以使用十幾種不同的方式編寫相同的功能查詢,並且在幕後的大部分時間您都會得到一個完全相同的查詢計劃,而不管您將事物放在什麼位置 –