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