翻譯|使用教程|編輯:董玉霞|2022-06-17 11:12:46.200|閱讀 282 次
概述:本文將介紹常見的SQL 查詢錯誤, 數據庫管理工具Navicat for MySQL是一套管理和開發 MySQL 或 MariaDB 的理想解決方案。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
本文將介紹常見的SQL 查詢錯誤, 數據庫管理工具Navicat for MySQL是一套管理和開發 MySQL 或 MariaDB 的理想解決方案。
像大多數編程人員一樣,數據庫開發人員或多或少傾向于編寫直接翻譯給定請求的代碼。大多數編程語言(包括 SQL)被設計為更易于人們閱讀,這也導致了一個問題。為什么會有問題?所有編程語言都能比其他語言更快地執行某些操作。在關系數據庫中,查詢優化器用于分析 SQL 查詢并確定稱為查詢計劃的有效執行機制。優化器能為每個查詢生成一個或多個查詢計劃,每個查詢計劃代表運行查詢的一種可能方式。然后選擇并使用最有效的查詢計劃來運行查詢。事實證明,模仿請求語言的 SQL 很少是最有效的方法。
在常見的 SQL 查詢錯誤系列的這一部分中,我們將探討一個編寫不佳的 SQL 語句的示例,并以提高效率的方式重寫它。
在數據庫開發人員的代碼中反復出現的一個錯誤是將索引列傳遞給函數。為了說明,我們會對這個表運行一個查詢,該表在 varchar customerName 列上有一個索引:
當要求檢索名稱以字母“R”開頭的所有客戶時,可能傾向于使用 LEFT() 函數返回 customerName 列的第一個字符:
不幸的是,將索引的 customerName 列傳遞給函數,查詢引擎必須評估表中每一行的結果!
在關系數據庫中,有一個術語源自 Search ARGument ABLE 的縮寫,又名 SARGable。如果 DBMS 引擎可以利用索引來加速查詢的運行,則查詢中的條件(或謂詞)被稱為 SARGable。另一方面,未能成為 SARGable 的查詢稱為非 SARGable 查詢。其效果類似于在沒有索引的書中搜索特定術語,每次都從第一頁開始,而不是跳到索引中標識特定頁的列表。顯然,這對查詢時間有負面影響,因此查詢優化的其中一個步驟是將此類條件轉換為 SARGable。
若要將上述條件變為 SARGable 條件,我們需要避免在索引列上使用函數。為此,我們必須使用 Like 運算符,這個邏輯等效(和 SARGable)的查詢來表達請求:
請注意,運行時間大大縮短。
更多有關Navicat for MySQL使用教程可點擊查看,歡迎加入Navicat for MySQL技術交流QQ群:765665608。
Navicat for MySQL是管理和開發 MySQL 或 MariaDB 的理想解決方案。它是一套單一的應用程序,能同時連接 MySQL 和 MariaDB 數據庫,并與 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、騰訊云和華為云等云數據庫兼容。這套全面的前端工具為數據庫管理、開發和維護提供了一款直觀而強大的圖形界面。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn