mysql關(guān)于or的索引的問題及解決
mysql關(guān)于or的索引問題
用UNION替換OR (適用于索引列)
在下面的例子中,LOC_ID 和REGION上都建有索引*
高效:
select loc_id , loc_desc , region from location where loc_id = 10 ?? union ?? select loc_id , loc_desc , region ?from location where region = "melbourne" ??
低效:
select loc_id , loc desc , region from location where loc_id = 10 or region = "melbourne"?
如果你堅(jiān)持要用OR,那就需要返回記錄最少的索引列寫在最前面。
mysql or不走索引分析
select * from tableName where a=1 and (b=1 or c=1)
其中建立了ab和ac的聯(lián)合索引,但是看db監(jiān)控慢查詢的掃描行數(shù)和a=1的行數(shù)相同。
通過explain看出執(zhí)行計(jì)劃是走ab的聯(lián)合索引,但是為啥掃描行數(shù)卻是a=1的行數(shù)呢?
猜測是因?yàn)橐閍=1 and b=1的數(shù)據(jù)時(shí)候,可以走ab索引,但是查出 a=1和c=1的數(shù)據(jù),就需要掃描a=1的所有數(shù)據(jù)。
可以通過聯(lián)合索引的數(shù)據(jù)結(jié)構(gòu)看出,當(dāng)a相同時(shí)候,會(huì)按照b來排序。
而且mysql一般不會(huì)選擇走多個(gè)索引,除非要索引合并,但是通過explain看出來并沒有索引合并。
所以只會(huì)走ab的索引&掃描a=1的所有數(shù)據(jù)來獲取c=1的數(shù)據(jù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
服務(wù)器不支持 MySql 數(shù)據(jù)庫的解決方法
出現(xiàn)問題:報(bào)錯(cuò)“服務(wù)器不支持 MySql 數(shù)據(jù)庫”,改函數(shù)function_exists('mysql_connect')返回 false2013-03-03Mysql 5.7.19 免安裝版配置方法教程詳解(64位)
這篇文章主要介紹了Mysql 5.7.19 免安裝版配置方法教程詳解,需要的朋友可以參考下2017-08-08解決MySQL安裝重裝時(shí)出現(xiàn)could not start the service mysql error:0問題的方法
這篇文章主要為大家詳細(xì)介紹了解決MySQL安裝重裝時(shí)出現(xiàn)could not start the service mysql error:0問題的方法,感興趣的小伙伴們可以參考一下2016-06-06Mysql時(shí)間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條
這篇文章主要介紹了Mysql時(shí)間軸數(shù)據(jù) 獲取同一天數(shù)據(jù)的前三條 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07mysql中mydumper 和 mysqldump 對比使用
MySQL數(shù)據(jù)庫備份工具有其自帶的mysqldump,屬于mysql官方的一款備份工具。但是第三方備份工具mydumper憑借優(yōu)越的特點(diǎn)為更多人所使用。下面就通過測試驗(yàn)證它們之間的備份效率。2017-05-05Mysql關(guān)于數(shù)據(jù)庫是否應(yīng)該使用外鍵約束詳解說明
MySQL 外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用。對于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表,外鍵所在的表就是從表。外鍵用來建立主表與從表的關(guān)聯(lián)關(guān)系,為兩個(gè)表的數(shù)據(jù)建立連接,約束兩個(gè)表中數(shù)據(jù)的一致性和完整性2021-10-10MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼
在 MySQL 中,要獲取數(shù)據(jù)庫內(nèi)所有表格的數(shù)據(jù)總數(shù),可以編寫一個(gè)查詢腳本來遍歷每個(gè)表并計(jì)算其行數(shù),所以本文給大家介紹了MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例,需要的朋友可以參考下2024-11-11