亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

mysql大數據查詢優化經驗分享(推薦)

2024-07-25 19:08:08
字體:
來源:轉載
供稿:網友

正兒八經mysql優化!

mysql數據量少,優化沒必要,數據量大,優化少不了,不優化一個查詢10秒,優化得當,同樣查詢10毫秒。

這是多么痛的領悟!

mysql優化,說程序員的話就是:索引優化和where條件優化。

實驗環境:MacBook Pro MJLQ2CH/A,mysql5.7,數據量:212萬+

ONE:

 select * from article INNER JOIN ( SELECT id FROM article WHERE  length(content_url) > 0 and  (select status from source where id = article.source_id)=1 and  (select status from category where id = article.category_id)=1 and  status = 1 and id < 2164931 order by stick desc,pub_time desc limit 240,15 ) AS tUSING(id);

咋一看,大佬肯定會想殺了我,沒事做啥自關聯,還是inner join。XX樓的,把我的殺豬刀拿來,我要宰了博主?。?!

說實話,早上出門我的腦袋沒被門擠,我也不想這樣的。

1.數據量大了,你要做offset很大的分頁查詢,還真的這樣提速,原因 ---> 用join子表中的id覆蓋到全表,避免全表掃描。

看我的order by(細語:不就是個order by,TM誰不會寫),你把這個order by換成你自己的表中的字段desc or explain看看。Extra ---> filesort ! shit !

2.針對這種多個條件的order by,通常我們會直接給兩個字段分別加index,然而還是會Extra ---> filesort。另辟蹊徑,給order by后面的所有條件加一個聯合索引,注意順序一定要和你的order by順序一致。這樣Extra就只剩下where了。

再看看where,(select status from source where id = article.source_id)=1 and ...又啥JB寫法!

3.想過用join+index的方式,最后測試出來,和這種方式幾乎無差別。生產環境是這樣寫的,那就這樣吧,還能少兩個索引(source_id,category_id),懶病犯了誰都阻擋不了,以后吃虧了又回來繼續優化唄。

4.這個點是我昨晚才get到的,where條件的滿足順序是優先滿足最后一個條件,從右到左,經過刪除index測試,確實有效果,能從6秒降到4秒,優化了index之后再次測試發現順序對耗時影響幾乎可以忽略不計,0.X毫秒。

TWO:

 select * from article INNER JOIN ( SELECT id FROM article WHERE INSTR(ifnull(title,''),'戰狼') > 0 and status != 9 order by pub_time desc limit 100,10 ) AS t USING(id);

嗯——又是inner join.......

INSTR(ifnull(title,''),'戰狼') > 0,為啥不用like......

1.考慮到這是管理平臺的搜索,沒有去搜索引擎上搜,搜索引擎是一個小時才同步一次數據,數據不全。管理人員搜索時只管他要的結果,like %XX%不能走索引,效率比instr低了5倍,又測試了regexp '.*XX*.',還是比instr耗時多一點,索性.....

desc or explain看看,filesort.....給pub_time加個index看看,還是filesort.....

2.這種情況有另外一種方案,SELECT id FROM article force index(pub_time),指定使用這個索引。但是這種寫法太缺靈活性了,OUT!百度一下,有高人指點迷津:把status和pub_time建個聯合索引(pub_time_status,order的條件在前),讓where查詢的時候,把這個index自動force上。

THREE:

select * from article where status != 9 order by pub_time desc limit 100000,25;desc or explain,還是filesort.....前面不是給status和pub_time建了聯合索引了嗎,tell me why......

好吧,我也不知道,把status和pub_time再建個聯合索引status_pub_time,這次where條件在前,explain沒filesort了,但是這個index卻沒有被使用,它勾搭出了pub_time_status。搞不懂啊

同時我又explain了TWO的SQL,都是如下圖:

mysql,大數據,優化

這二者中刪除任何一個都不行,刪除一個,就有sql會filesort!

FOUR:

SELECT * from follow where (((SELECT status FROM source WHERE id=follow.source_id)=1 and follow.type=1) or ((select status from topic WHERE id=follow.source_id)=1 and follow.type=2)) AND user_id=10054 ORDER BY sort limit 15,15; SELECT * from follow inner join( SELECT id from follow where (((SELECT status FROM source WHERE id=follow.source_id)=1 and follow.type=1) or ((select status from topic WHERE id=follow.source_id)=1 and follow.type=2)) AND user_id=10054 ORDER BY sort limit 15,15 ) as t using(id); (SELECT id, source_id, user_id, temporary, sort, follow_time, read_time,type from follow where (SELECT status FROM source WHERE id=follow.source_id)=1 and follow.type=1 and user_id=10054) union all (SELECT id, source_id, user_id, temporary, sort, follow_time, read_time,type from follow where (select status from topic WHERE id=follow.source_id)=1 and follow.type=2 and user_id=10054) ORDER BY sort limit 15,15;

看看這三句sql,interesting,是不是!

為了公平起見,我已經優化了索引,user_id_sort(user_id,sort),讓where在用user_id判斷時force上這個索引。

第一句:0.48ms

第二句:0.42ms

第三句:6ms,導致時間長那么多的原因是union(查詢兩次表,合并成子表)后不能用index覆蓋到order by的sort上

有的時候union不一定比or快。

總結

以上所述是小編給大家分享的mysql大數據查詢優化經驗,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线精品视频| 欧美性高潮床叫视频| 97精品一区二区三区| 日韩av快播网址| 久久影视电视剧免费网站| 欧美激情精品久久久| 亚洲一二在线观看| 成人激情电影一区二区| 韩剧1988在线观看免费完整版| 国产精品免费在线免费| 欧美精品久久久久a| 日韩激情在线视频| 国产精品jizz在线观看麻豆| 91精品久久久久久综合乱菊| 日韩精品中文字幕在线观看| 亚洲另类欧美自拍| 久久久久久久爱| 97精品国产97久久久久久免费| 日韩在线视频中文字幕| 亚洲黄色在线观看| 精品人伦一区二区三区蜜桃免费| 国产精品免费一区二区三区都可以| 国产精品久久久久久久久久久新郎| 欧美精品国产精品日韩精品| 日本视频久久久| 成人淫片在线看| 精品久久久久久久久久国产| 日本久久精品视频| 精品少妇一区二区30p| 青青a在线精品免费观看| 欧美大尺度激情区在线播放| 成人黄色在线播放| 久久久精品影院| 日韩电影在线观看中文字幕| 国产+成+人+亚洲欧洲| 一区二区三区四区在线观看视频| 欧美午夜性色大片在线观看| 孩xxxx性bbbb欧美| 日韩欧美999| 国产一区av在线| 精品亚洲aⅴ在线观看| 亚洲成人精品久久久| 日韩精品极品毛片系列视频| 亚洲电影免费观看高清| 国产精品福利久久久| 国外成人在线播放| 91精品在线观| 亚洲2020天天堂在线观看| 日韩欧美在线字幕| 欧美在线视频一区二区| 亚洲激情国产精品| 亚洲xxx视频| 欧美一区二区三区精品电影| 精品高清美女精品国产区| 国产成+人+综合+亚洲欧洲| 久久五月情影视| 久久久精品久久久久| 亚洲视频777| 日韩欧美大尺度| 精品视频9999| 日韩免费观看av| 国产激情999| 国产精品自产拍高潮在线观看| 国内成人精品视频| 精品国产成人av| 久久成年人视频| 揄拍成人国产精品视频| 欧美精品生活片| 国产综合在线视频| 亚洲aaaaaa| 亚洲美女精品成人在线视频| 国产99久久精品一区二区永久免费| 中文字幕九色91在线| 中文欧美日本在线资源| 日韩成人小视频| 国产精品成av人在线视午夜片| 久久精品一区中文字幕| 欧美多人乱p欧美4p久久| 亚洲欧美在线播放| 亚洲一区二区福利| 欧美激情乱人伦一区| 亚洲国产精品成人精品| 精品亚洲精品福利线在观看| 欧美电影院免费观看| 成年人精品视频| 91精品视频免费看| 在线成人中文字幕| 国产精品视频最多的网站| 国产精品第一视频| 中文字幕日本精品| 国产精品99蜜臀久久不卡二区| 亚洲最大在线视频| 国产精品一区久久久| 在线性视频日韩欧美| 国产91色在线|免| 亚洲免费视频网站| 国产啪精品视频网站| 欧美精品在线第一页| 亚洲国产精品va在线| 91国内产香蕉| 亚洲午夜未删减在线观看| 亚洲欧洲成视频免费观看| 国产精品男女猛烈高潮激情| 国产精品精品视频一区二区三区| 日韩精品免费在线视频| 美女国内精品自产拍在线播放| 久久激情视频久久| 中文字幕av一区二区| 国产精品免费久久久| 亚洲视频在线观看| 91国产美女在线观看| 久久精品电影一区二区| 成人av在线亚洲| 日本成人在线视频网址| 亚洲天堂网在线观看| 国产精品美女网站| 北条麻妃久久精品| 日韩大陆欧美高清视频区| 91av视频导航| 欧美日韩黄色大片| 亚洲一区二区自拍| 亚洲国产精品久久久| 欧美另类极品videosbest最新版本| 性金发美女69hd大尺寸| 高清一区二区三区日本久| 国产精品久久久av久久久| 欧美成人免费视频| 国产精品视频不卡| 久久久精品国产网站| 亚洲色图25p| 国产亚洲精品久久久久久牛牛| 国产精品男女猛烈高潮激情| 97精品国产91久久久久久| 激情懂色av一区av二区av| 一区二区三区四区精品| 亚洲精品美女久久久久| 久久久av亚洲男天堂| 欧美日韩爱爱视频| 欧美精品成人91久久久久久久| 国产精品日韩精品| 国产精品第2页| 日韩有码在线播放| 亚洲第一天堂av| 尤物精品国产第一福利三区| 国产精品va在线播放我和闺蜜| 久久久女人电视剧免费播放下载| 亚洲天堂网在线观看| 久精品免费视频| 久久久精品免费| 日本一区二区不卡| 国产精品视频一区二区三区四| 国产97在线|日韩| 色噜噜国产精品视频一区二区| 欧美日韩亚洲成人| 国产成人一区二区三区小说| 国产精品一区二区三区成人| 欧美影院久久久| 伊人久久五月天| 91精品国产综合久久久久久久久| 欧美另类xxx| 日韩欧美国产网站| 日本一区二区在线免费播放| 国产精品国产三级国产专播精品人| 色偷偷偷综合中文字幕;dd|