查詢最佳化:用聯結替換子查詢的巨大影響
最近的應用程式重構透過用內連接替換子查詢顯著提高了效能。原始程式碼在 WHERE
子句中使用了子查詢:
<code class="language-sql">WHERE id IN (SELECT id FROM ...)</code>
這項變更帶來了驚人的 100 倍加速,將執行時間從 50 秒降至 0.3 秒。 這就引出了一個問題:為什麼會有如此巨大的差異?
關鍵在於理解子查詢的行為。 相關子查詢(其中子查詢的 WHERE
子句取決於外部查詢的值)針對外部查詢中的每一行重複執行。 這種重複執行的效率極低。 相反,不相關的子查詢僅執行一次。
原始子查詢是相關的。 對於處理的每一行,資料庫都必須執行子查詢,從而導致大量查找。
用內部聯結取代子查詢允許資料庫有效地利用索引查找。連接條件(例如,submission_id = st_tag_id
)允許對每個符合條件的行進行單一索引查找。這大大減少了資料庫訪問,解釋了效能的飛躍。
教訓? 仔細考慮子查詢與連線對於 SQL 查詢最佳化至關重要。了解相關和非相關子查詢及其效能影響,使開發人員能夠編寫更快、更有效率的資料庫查詢。
以上是子查詢與聯結:為什麼用聯結替換子查詢會帶來 100 倍的效能提升?的詳細內容。更多資訊請關注PHP中文網其他相關文章!