述詞的評估順序
就在本系列的第 3 部分之前,我們短暫地停頓了一下,討論了 SQL 中的述詞,因為它們會導致與外部聯結相關的錯誤。在本系列「常見的 SQL 查詢錯誤」的最後一部分中,述詞將再次出現,因為我們將研究述詞的評估順序如何導致看似結構良好的查詢因錯誤而執行失敗。
搗亂的子査詢
在這個關於「常見的 SQL 查詢錯誤」的系列中,我們已經看了幾個 SQL 查詢的範示,這些查詢在第一次檢查時看起來非常可靠,但它們有機會導致錯誤的結果和/或效能降低。上週,我們學習了放置謂詞的位置如何對查詢執行產生負面影響,尤其是在外部聯結中。今天將重點介紹子查詢,以及當任何基礎資料表變更時它們如何破壞 SQL 陳述式。
外部聯結(Outer Join)和笛卡兒積(Cartesian Product)
在這個關於「常見的 SQL 查詢錯誤」的系列中,我們一直在探索看似直觀的 SQL 查詢建構方法如何導致反模式,從而導致錯誤的結果和/或效能降低。上週,我們暫停了這個系列,討論了 SQL 中的述詞。在本期文章中,我們將學習它們的位置如何對查詢執行產生負面影響,尤其是在外部聯結中。
第 2 部分:非 SARGable 查詢條件
和大多數程式設計師一樣,資料庫開發人員或多或少傾向於撰寫直接翻譯指定請求的程式碼。大多數程式設計語言(包括 SQL)被設計為人們看得懂的,這也導致了一個問題。為什麼會有問題?所有程式設計語言都能比其他語言更快地執行某些作業。在關聯式資料庫中,查詢最佳化工具用於分析 SQL 查詢,並判斷稱為查詢計劃的高效執行機制。最佳化工具能為每個查詢產生一個或多個查詢計劃,每個查詢計劃代表一種可能的查詢執行方式。然後選取最有效的査詢計劃,並利用它來執行査詢。事實證明,模仿請求語言的 SQL 甚少是最有效的方法。
在常見的 SQL 查詢錯誤系列的這一部分中,我們將探討一個撰寫得不好的 SQL 陳述式的範例,並以提高效率的方式重寫它。
Navicat 文章
頻道記錄分享
部落格封存檔
- 2025 (1)
- 2024 (1)
- 2023 (1)
- 2022 (1)
- 2021 (1)
- 2020 (1)
- 2019 (1)
- 2018 (1)
- 2017 (1)