日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL避免索引列使用 OR 條件

瀏覽:39日期:2023-10-16 17:08:23

這個虧已經(jīng)吃過很多次了,在開發(fā)以前的sql代碼里面,許多以 or 作為where條件的查詢,甚至更新。這里舉例來說明使用 or 的弊端,以及改進(jìn)辦法。

select f_crm_id from d_dbname1.t_tbname1 where f_xxx_id = 926067 and (f_mobile =’1234567891’ or f_phone =’1234567891’ ) limit 1

從查詢語句很容易看出,f_mobile和f_phone兩個字段都有可能存電話號碼,一般思路都是用 or 去一條sql解決,但表數(shù)據(jù)量一大簡直是災(zāi)難:

MySQL避免索引列使用 OR 條件

t_tbanme1上有索引 idx_id_mobile(f_xxx_id,f_mobile) , idx_phone(f_phone) , idx_id_email(f_id,f_email) ,explain 的結(jié)果卻使用了 idx_id_email 索引,有時候運氣好可能走 idx_id_mobile f_xxx_id

因為mysql的每條查詢,每個表上只能選擇一個索引。如果使用了 idx_id_mobile 索引,恰好有一條數(shù)據(jù),因為有 limit 1 ,那么恭喜很快得到結(jié)果;但如果 f_mobile 沒有數(shù)據(jù),那 f_phone 字段只能在f_id條件下挨個查找,掃描12w行。 or 跟 and 不一樣,甚至有開發(fā)認(rèn)為添加 (f_xxx_id,f_mobile,f_phone) 不就完美了嗎,要吐血了~

<!-- more -->

那么優(yōu)化sql呢,很簡單( 注意f_mobile,f_phone上都要有相應(yīng)的索引 ), 方法一 :

(select f_crm_id from d_dbname1.t_tbname1 where f_xxx_id = 926067 and f_mobile =’1234567891’ limit 1 ) UNION ALL (select f_crm_id from d_dbname1.t_tbname1 where f_xxx_id = 926067 and f_phone =’1234567891’ limit 1 )

MySQL避免索引列使用 OR 條件

兩條獨立的sql都能用上索引,分查詢各自limit,如果都有結(jié)果集返回,隨便取一條就行。

還有一種優(yōu)化辦法,如果這種查詢特別頻繁(又無緩存),改成單獨的sql執(zhí)行,比如大部分號碼值都在f_mobile上,那就先執(zhí)行分sql1,有結(jié)果則結(jié)束,判斷沒有結(jié)果再執(zhí)行分sql2 ,能減少數(shù)據(jù)庫查詢速度,讓代碼去處理更多的事情, 方法二 偽代碼:

sql1 = select f_crm_id from d_dbname1.t_tbname1 where f_xxx_id = 926067 and f_mobile =’1234567891’ limit 1;sq1.execute();if no result sql1: sql1 = select f_crm_id from d_dbname1.t_tbname1 where f_xxx_id = 926067 and f_phone =’1234567891’ limit 1; sql1.execute();

復(fù)雜一點的場景是止返回一條記錄那么簡單,limit 2:

select a.f_crm_id from d_dbname1.t_tbname1 as a where (a.f_create_time > from_unixtime(’1464397527’) or a.f_modify_time > from_unixtime(’1464397527’) ) limit 0,200

這種情況方法一、二都需要改造,因為 f_create_time,f_modify_time 都可能均滿足判斷條件,這樣就會返回重復(fù)的數(shù)據(jù)。

方法一需要改造:

(select a.f_crm_id from d_dbname1.t_tbname1 as a where a.f_create_time > from_unixtime(’1464397527’) limit 0,200 ) UNION ALL(select a.f_crm_id from d_dbname1.t_tbname1 as a where a.f_modify_time > from_unixtime(’1464397527’) and a.f_create_time <= from_unixtime(’1464397527’) limit 0,200 )

有人說 把 UNION ALL 改成 UNION 不就去重了嗎?如果說查詢比較頻繁,或者limit比較大,數(shù)據(jù)庫還是會有壓力,所以需要做trade off。

這種情況更多還是適合方法二,包括有可能需要 order by limit 情況。改造偽代碼:

sql1 = (select a.f_crm_id from d_dbname1.t_tbname1 as a where a.f_create_time > from_unixtime(’1464397527’) limit 0,200 );sql1.execute();sql1_count = sql1.result.countif sql1_count < 200 : sql2 = (select a.f_crm_id from d_dbname1.t_tbname1 as a where a.f_modify_time > from_unixtime(’1464397527’) and a.f_create_time <= from_unixtime(’1464397527’) limit 0, (200 - sql1_count) ); sql2.execute();final_result = paste(sql1,sql2);

or條件在數(shù)據(jù)庫上很難優(yōu)化,能在代碼里優(yōu)化邏輯,不至于拖垮數(shù)據(jù)庫。只有在 or 條件下無需索引時(且需要比較的數(shù)據(jù)量小),才考慮。

相同字段 or 可改成 in,如 f_id=1 or f_id=100 -> f_id in (1,100) 。 效率問題見文章 mysql中or和in的效率問題 。

上述優(yōu)化情景都是存儲引擎在 InnoDB 情況下,在MyISAM有不同,見 mysql or條件可以使用索引而避免全表 。

來自: https://segmentfault.com/a/1190000005644978

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产欧美三级| 蜜桃视频欧美| 久久国产精品久久久久久电车 | 伊人www22综合色| 在线一区电影| 日韩国产精品久久久久久亚洲| 国产日产高清欧美一区二区三区| 久久99国产精品视频| 噜噜噜久久亚洲精品国产品小说| 亚洲精品成人一区| 亚洲女同中文字幕| 国产一区亚洲| 国产偷自视频区视频一区二区| 日韩午夜精品| 亚洲精品欧美| 欧美激情在线精品一区二区三区| 国产成人久久精品麻豆二区 | 福利精品一区| 欧美精品高清| 欧美日韩四区| 丝袜美腿亚洲一区二区图片| 三级一区在线视频先锋| 日韩三区四区| 国产乱人伦丫前精品视频| 国产精东传媒成人av电影| 欧美少妇精品| 天堂av在线一区| 国产精品久久久久9999高清| 伊人久久视频| 亚洲免费网址| 91综合久久爱com| 四季av一区二区凹凸精品| 欧洲激情综合| 国产欧美另类| 蜜臀91精品国产高清在线观看| 一区二区三区四区日韩| 国产精品久久久久av蜜臀 | 91精品一区国产高清在线gif | 日韩中文字幕| 久久久久久网| 蜜臀精品久久久久久蜜臀| 国产激情久久| 亚州av乱码久久精品蜜桃| 日韩高清电影一区| 欧美freesex黑人又粗又大| 日韩午夜电影| 国产精品a级| 激情综合网址| 国产精品视频一区二区三区| 日韩在线免费| 青草综合视频| 欧美亚洲国产激情| 国产日韩高清一区二区三区在线| 91精品国产自产在线观看永久∴| 日韩午夜视频在线| 99久久久久| 欧美日韩一区自拍| 九一国产精品| 久久亚州av| 亚洲一二三区视频| 91亚洲国产高清| 日韩精品导航| 亚洲欧洲另类| 高清不卡一区| 久久狠狠久久| 丝袜国产日韩另类美女| 日韩一区电影| 国产精品综合| 热久久免费视频| 久久婷婷久久| 精品国产aⅴ| 日韩中出av| 91成人精品视频| 精品一区视频| 日本精品另类| 欧美+日本+国产+在线a∨观看| 欧美日韩一区二区高清| 伊人久久大香线蕉av超碰演员| 精品少妇av| 日韩精品久久理论片| 午夜久久福利| 日韩精品诱惑一区?区三区| 国产欧美亚洲一区| 一区二区三区四区日韩| 91成人精品| 99视频精品全国免费| 成人在线视频免费| 国产精品v亚洲精品v日韩精品| 少妇精品久久久| 亚洲欧美久久| 播放一区二区| 97精品国产福利一区二区三区| 国产精品欧美大片| 蜜桃久久久久久| 亚洲美洲欧洲综合国产一区| 色综合www| 97精品国产| 成人台湾亚洲精品一区二区| 国产高清亚洲| 欧美天堂在线| 日本免费一区二区视频| 亚洲精品韩国| 亚洲欧美专区| 亚洲香蕉视频| 亚洲九九精品| 久久国产精品毛片| 午夜一区在线| 亚洲欧美视频| 午夜一区在线| 亚洲一级在线| 在线视频精品| 国产精品免费看| 亚洲欧美激情诱惑| 鲁大师成人一区二区三区| 在线看片不卡| 一本色道精品久久一区二区三区| 亚洲精品91| 亚洲精品小说| 日韩视频二区| 久久不射中文字幕| 香蕉成人久久| 蜜桃久久av一区| 免费观看在线色综合| 蜜臀va亚洲va欧美va天堂| 在线精品一区二区| 日韩av成人高清| 国产精品久久久久久模特| 麻豆视频观看网址久久| 黄色精品视频| 欧美天堂视频| 欧美日韩中文一区二区| 欧美日中文字幕| 欧美日韩国产传媒| 噜噜噜躁狠狠躁狠狠精品视频 | 91久久国产| 亚洲永久字幕| 日韩va欧美va亚洲va久久| 国产精品欧美三级在线观看| 精品久久久久久久| 精品亚洲美女网站| 国产精品日本欧美一区二区三区| 亚洲三级视频| 欧美激情aⅴ一区二区三区| 首页国产精品| 国产综合欧美| 亚洲九九精品| 国产精品成人**免费视频| 亚洲国产福利| 亚洲欧美日韩高清在线| 亚洲精品精选| 麻豆国产一区| 欧美午夜精彩| 在线观看视频免费一区二区三区| 欧美一区二区三区久久精品| 国产一区二区三区视频在线| 国产字幕视频一区二区| 亚洲人www| 久久97久久97精品免视看秋霞| 精品捆绑调教一区二区三区| 国产精品婷婷| 国产精品视频3p| 99精品视频精品精品视频| 亚洲精品伊人| 麻豆网站免费在线观看| 欧美日韩国产高清| 欧美日韩xxxx| 久久人人99| 欧美日本久久| 久久黄色影院| 日本麻豆一区二区三区视频| 日韩国产欧美| 日本伊人午夜精品| 伊人久久在线| 日韩一区二区三区免费视频| 狠狠久久伊人中文字幕| 99在线精品视频在线观看| 欧美激情一区| 性一交一乱一区二区洋洋av| 美女尤物国产一区| 亚洲二区视频| 国产精品久久久久9999高清| 欧美成人精品| 久久精品国产久精国产| 视频在线观看国产精品| 国产一区二区三区网| 久久午夜视频| 中文字幕高清在线播放| 日韩三级视频| 999国产精品999久久久久久| 国产日韩亚洲| 性欧美长视频| 亚洲天堂免费电影| 国产日韩一区二区三区在线播放| 极品裸体白嫩激情啪啪国产精品| 日韩国产精品久久久| 久久久9色精品国产一区二区三区| 国产情侣久久| 久久高清一区| 亚洲成av在线| 国产美女亚洲精品7777|