精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一個不可思議的MySQL慢查分析與解決

數據庫 MySQL
我原本打算用 hint,強制讓他走索引,但是實際上強制走索引的執行時間并不能帶來滿意的效果。結合業務邏輯,來優化 SQL,是最好的方式,也是終極法寶,一定要好好利用。

[[209138]]

一、前言

開發需要定期的刪除表里一定時間以前的數據,SQL 如下

  1. mysql > delete from testtable WHERE biz_date <= '2017-08-21 00:00:00' AND status = 2 limit 500\G 

mysql > delete from testtable WHERE biz_date <= '2017-08-21 00:00:00' AND status = 2 limit 500\G前段時間在優化的時候,已經在相應的查詢條件上加上了索引

  1. KEY `idx_bizdate_st` (`biz_date`,`status`) 

但是實際執行的 SQL 依然非常慢,為什么呢,我們來一步步分析驗證下

二、分析

表上的字段既然都有索引,那么按照之前的文章分析,是兩個字段都可以走上索引的。如果有疑問,請參考文章 10 分鐘讓你明白 MySQL 是如何利用索引的

既然能夠利用索引,表的總大小也就是 200M 左右,那么為什么形成了慢查呢?

我們查看執行計劃,去掉 limit 后,發現他選擇了走全表掃描。

  1. mysql > desc select *  from  testtable   WHERE biz_date <=  '2017-08-21 00:00:00' 
  2. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  3. | id | select_type | table     | type | possible_keys  | key  | key_len |  ref   | rows   |  Extra    | 
  4. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  5. | SIMPLE      | testtable | ALL  | idx_bizdate_st | NULL | NULL    | NULL | 980626 |  Using where  | 
  6. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  7.  row  in set 0.00  sec) 
  8. -- 只查詢biz_date 
  9. -- 關鍵點:rows: 980626 ;type:ALL  
  10. mysql > desc   select  *  from  testtable   WHERE biz_date <=  '2017-08-21 00:00:00' and  status =  
  11. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  12. | id | select_type | table     | type | possible_keys  | key  | key_len | ref   | rows   |  Extra      | 
  13. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  14.  | SIMPLE      | testtable | ALL  | idx_bizdate_st | NULL | NULL    | NULL |  980632  |  Using where 
  15. +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+ 
  16.  row  in set 0.00  sec) 
  17. -- 查詢biz_date + status  
  18. -- 關鍵點:rows: 980632 ;type:ALL   
  19. mysql > desc  select  *  from  testtable   WHERE biz_date <=  '2017-08-21 00:00:00' and  status =   limit 100 
  20. +----+-------------+-----------+-------+----------------+----------------+---------+------+--------+-----------------------+ 
  21. | id | select_type | table     | type  | possible_keys  | key            | key_len | ref   | rows   |  Extra               | 
  22. +----+-------------+-----------+-------+----------------+----------------+---------+------+--------+-----------------------+ 
  23. 1 | SIMPLE      | testtable | range | idx_bizdate_st | idx_bizdate_st |         | NULL |  490319  |  Using  index condition | 
  24. +----+-------------+-----------+-------+----------------+----------------+---------+------+--------+-----------------------+ 
  25.  row  in set 0.00  sec) 
  26. -- 查詢biz_date + status+ limit  
  27. -- 關鍵點:rows: 490319 ;   
  28. mysql >  select  count(*)  from  testtable   WHERE biz_date <=  '2017-08-21 00:00:00' and  status =
  29. +----------+ 
  30. count(*) | 
  31. +----------+ 
  32. | 0 | 
  33. +----------+ 
  34.  row  in set ( 0.34  sec) 
  35. mysql >  select  count(*)  from  testtable   WHERE biz_date <= '2017-08-21 00:00:00' 
  36. +----------+ 
  37. count(*) | 
  38. +----------+ 
  39. 970183  | 
  40. +----------+ 
  41.  row in set  ( 0.33  sec) 
  42. mysql > select  count(*)from  testtable; 
  43. +----------+ 
  44. count(*) | 
  45. +----------+ 
  46. 991421  | 
  47. +----------+ 
  48.  row  in set  ( 0.19  sec) 
  49. mysql >  select  distinct biz_status  from  whwtestbuffer; 
  50. +------------+ 
  51. | biz_status | +-
  52. -----------+ 
  53. |  | 
  54. |  | 
  55. |    | 
  56. +------------+ 

通過以上查詢,我們可以發現如下幾點問題:

通過 biz_date 預估出來的行數 和 biz_date + status=2 預估出來的行數幾乎一樣,為 98w。

實際查詢表 biz_date + status=2 一條記錄都沒有。

整表數據量達到了99萬,MySQL 發現通過索引掃描需要98w行(預估)

因此,MySQL 通過統計信息預估的時候,發現需要掃描的索引行數幾乎占到了整個表,放棄了使用索引,選擇了走全表掃描。

那是不是他的統計信息有問題呢?我們重新收集了下表統計信息,發現執行計劃的預估行數還是一樣,猜測只能根據組合索引的***個字段進行預估(待確定)

那我們試下直接強制讓他走索引呢?

  1. mysql > select * from testtable WHERE biz_date <= '2017-08-21 00:00:00' and status = 2;
  2. Empty set (0.79 sec)
  3. mysql > select * from testtable force index(idx_bizdate_st) WHERE biz_date <= '2017-08-21 00:00:00' and status = 2;
  4. Empty set (0.16 sec) 

我們發現,強制指定索引后,查詢耗時和沒有強制索引比較,的確執行速度快了很多,因為沒有強制索引是全表掃描嘛!但是!依然非常慢!

那么還有什么辦法去優化這個本來應該很快的查詢呢?

大家應該都聽說過要選擇性好的字段放在組合索引的最前面?

是的,相對于 status 字段,biz_date 的選擇性更加不錯,那組合索引本身已經沒有好調整了

那,能不能讓他不要掃描索引的那么多范圍呢?之前的索引模型中也說過,MySQL 是通過索引去確定一個掃描范圍,如果能夠定位到盡可能小的范圍,那是不是速度上會快很多呢?

并且業務邏輯上是定期刪除一定日期之前的數據。所以邏輯上來說,每次刪除都是只刪除一天的數據,直接讓 SQL 掃描一天的范圍。那么我們就可以改寫 SQL 啦!

  1. mysql > select  *  from  testtable WHERE biz_date >=  '2017-08-20 00:00:00' and  biz_date <= '2017-08-21 00:00:00' and  status =  
  2. Empty set 0.00  sec) 
  3. mysql > desc  select  *  from  testtable WHERE biz_date >= '2017-08-20 00:00:00' and  biz_date <=  2017-08-21 00:00:00' and  status =  
  4. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  5. | id | select_type | table            | type  | possible_keys  | key            | key_len |  ref   | rows |  Extra              | 
  6. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  7. | | SIMPLE      | testtable        | range | idx_bizdate_st | idx_bizdate_st |        | NULL |   789  |  Using index condition | 
  8. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  9.  row  in set  ( 0.00  sec) 
  10. -- rows降低了很多,乖乖的走了索引 
  11. mysql > desc select  *  from  testtable WHERE biz_date >= '2017-08-20 00:00:00' and biz_date <='2017-08-21 00:00:00'  ; 
  12. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  13. | id | select_type | table            | type  | possible_keys  | key            | key_len | ref   | rows |  Extra               | 
  14. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  15. | | SIMPLE      | testtable        | range | idx_bizdate_st | idx_bizdate_st |         | NULL |  1318  |  Using  index condition | 
  16. +----+-------------+------------------+-------+----------------+----------------+---------+------+------+-----------------------+ 
  17. 1 row  in set  ( 0.00  sec) 
  18. -- 即使沒有status,也是肯定走索引啦 

 

三、小結

這個問題,我原本打算用 hint,強制讓他走索引,但是實際上強制走索引的執行時間并不能帶來滿意的效果。結合業務邏輯,來優化 SQL,是***的方式,也是***法寶,一定要好好利用。不了解業務的 DBA,不是一個好 DBA... 繼續去補業務知識去了。 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2017-03-21 08:52:20

神經網絡聲譽

2013-10-10 13:07:25

方物

2022-01-24 15:57:34

Python返回功能代碼

2011-07-18 13:35:14

HTML 5

2013-07-31 15:06:58

未來的WebWebGLWeb

2011-02-23 08:50:22

C#.NETdynamic

2010-07-15 16:21:03

不可思議的服務器

2021-11-10 06:38:01

Python鏈式操作

2020-07-02 15:40:11

Spring BootJar包Java

2014-01-14 10:33:42

開源硬件開源

2023-04-06 09:44:00

ChatGPT行業質量

2012-05-16 17:28:32

智能手機

2016-07-06 11:56:52

思科漢堡光纖骨干網

2014-07-26 22:18:51

2023-04-04 22:31:11

GPT-5人工智能

2021-03-03 07:12:47

Windows10操作系統微軟

2012-02-13 11:01:27

N9Android 4.0

2025-11-12 00:22:00

2024-04-07 00:00:00

億級數據ES

2014-11-13 10:08:21

點贊
收藏

51CTO技術棧公眾號

亚洲网站免费| 台湾av在线二三区观看| 婷婷激情综合| 日韩欧美在线观看一区二区三区| 国产一区二区四区| 精品资源在线看| 狠狠色丁香婷婷综合久久片| 久久久久中文字幕2018| 在线国产视频一区| 国产精品99久久免费| 国产欧美日韩精品一区| 51精品国产人成在线观看| 国产成人精品片| 国产精品久久久久蜜臀| 日韩av网址在线| 欧美大片久久久| 免费在线小视频| 中文字幕日韩av资源站| 久久福利电影| 国内毛片毛片毛片毛片| 亚洲一区二区三区四区五区午夜| 精品国模在线视频| 中文字幕人妻一区二区| 4438全国亚洲精品观看视频| 欧美日韩一区中文字幕| 少妇高潮喷水在线观看| av黄色在线| 中文一区二区完整视频在线观看| 精品乱色一区二区中文字幕| 国产又大又长又粗| 视频一区二区三区入口| 久久久久久午夜| 麻豆明星ai换脸视频| 欧洲伦理片一区 二区 三区| 国产专区欧美精品| 国产精品久久久999| 影音先锋亚洲天堂| 欧美日韩一区自拍 | 国产69精品久久久久久| 欧美三级免费看| 91精品国偷自产在线电影 | 91中文字幕永久在线| 一区三区自拍| 91精品国产一区二区| 校园春色 亚洲色图| av高清一区| 一本高清dvd不卡在线观看| 亚洲熟妇国产熟妇肥婆| 国产一线二线在线观看| 亚洲影视在线播放| 大地资源网在线观看免费官网| 午夜在线小视频| 日本一区二区免费在线| 日韩欧美亚洲v片| 福利视频在线播放| 国产调教视频一区| 日韩欧美三级电影| 在线a免费看| 国产精品欧美精品| 青少年xxxxx性开放hg| 嫩草香蕉在线91一二三区| 国产精品久久免费看| 在线国产99| 亚洲夜夜综合| 亚洲成av人片在线观看| 国产v片免费观看| 永久免费毛片在线播放| 色综合久久中文字幕综合网| 北条麻妃av高潮尖叫在线观看| 免费福利视频一区二区三区| 色综合 综合色| 欧美婷婷精品激情| 日韩免费在线电影| 精品三级在线看| 国产a级黄色片| 亚洲福利天堂| 色视频www在线播放国产成人| 国产精品麻豆免费版现看视频| 国产精品久久久久蜜臀| 欧美激情极品视频| 日本午夜视频在线观看| 奇米精品一区二区三区在线观看| 96精品久久久久中文字幕| 亚洲精选一区二区三区| 91麻豆国产自产在线观看| 日本在线观看一区二区三区| 日本最新在线视频| 亚洲午夜av在线| 成人黄色一区二区| 九九99久久精品在免费线bt| 亚洲成a人片在线不卡一二三区| 国产欧美日韩精品在线| 国产一区二区三区无遮挡 | 欧美三级精品| 欧美电影影音先锋| 亚洲视频在线播放免费| 精品日韩一区| 欧美黄色性视频| 色屁屁影院www国产高清麻豆| 另类人妖一区二区av| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 九九视频精品全部免费播放| 日韩最新免费不卡| 在线观看免费国产视频| 精品一区二区精品| 久久国产精品-国产精品| 日本韩国在线视频爽| 午夜视频一区二区| 亚洲日本黄色片| 日韩有码一区| 欧美福利视频在线| 亚洲一线在线观看| 久久亚洲一区二区三区四区| 91精品国产毛片武则天| 欧美97人人模人人爽人人喊视频| 亚洲国产第一页| 99久久久免费精品| 日韩制服丝袜av| 99久久一区三区四区免费| 91涩漫在线观看| 午夜激情一区二区三区| 一级黄色片在线免费观看| 国产精品一国产精品| 久久久亚洲成人| 国产特级aaaaaa大片| 中文字幕av资源一区| 欧美日韩二三区| 一区二区三区自拍视频| 精品国产美女在线| 中文字幕 视频一区| 久久―日本道色综合久久| 中国丰满熟妇xxxx性| 精品视频在线一区| 久久精品一区中文字幕| 中文字幕人妻互换av久久| 久久久亚洲精品石原莉奈| 精品无码国产一区二区三区av| 高清一区二区中文字幕| 中文字幕免费精品一区| 中文字幕免费高清网站| 久久综合色一综合色88| 日本精品久久久久久久久久| 91精品国产乱码久久久竹菊| 不卡中文字幕av| 国产伦理吴梦梦伦理| 亚洲国产成人一区二区三区| 国产一线二线三线在线观看| 伊人久久大香线蕉综合网站 | 男人的天堂视频在线| 天天综合91| 久久视频国产精品免费视频在线| 国产巨乳在线观看| 亚洲六月丁香色婷婷综合久久| 中文字幕亚洲影院| 欧美在线不卡| 国产精品二区三区四区| а√天堂资源官网在线资源| 日韩成人黄色av| 亚洲天堂五月天| 中文字幕第一区第二区| 色天使在线观看| 亚洲精品a级片| 成人av片网址| 老司机深夜福利在线观看| 亚洲国产成人一区| 日本黄色一级视频| 中文字幕欧美区| 成 人 黄 色 小说网站 s色| 99精品视频精品精品视频| 91网站免费观看| 免费在线国产视频| 日韩电影中文字幕av| 精品国产午夜福利| 国产精品美女久久久久av爽李琼 | 国产精品18hdxxxⅹ在线| 国内精品模特av私拍在线观看 | 久久精品在线播放| 超碰在线观看99| 欧美日韩性生活视频| 欧洲女同同性吃奶| 捆绑调教美女网站视频一区| 国产一级片91| 视频小说一区二区| 国产精品亚洲片夜色在线| 91麻豆一二三四在线| 亚洲国产精品高清久久久| 久久草视频在线| 久久久久久久久97黄色工厂| 涩多多在线观看| 国产日产高清欧美一区二区三区| 日本高清不卡一区二区三| 外国成人毛片| 欧美性资源免费| av超碰免费在线| 国产丝袜一区视频在线观看| 91久久久久国产一区二区| 午夜一区二区三区在线观看| 国产又粗又猛又爽又黄的视频小说| 国产风韵犹存在线视精品| 日韩中文字幕组| 亚洲一级二级| 亚洲午夜在线观看| 日韩欧美ww| 147欧美人体大胆444| 在线最新版中文在线| 欧美日韩成人在线视频| 阿v免费在线观看| 亚洲第一级黄色片| 国产伦精品一区二区三区四区 | 妺妺窝人体色www在线小说| 国产亚洲精品美女久久久久久久久久| 91精品天堂| 激情亚洲小说| 欧美一区深夜视频| 日本一本在线免费福利| 日韩亚洲第一页| 免费在线观看一级毛片| 精品国产91乱码一区二区三区 | 黄色欧美视频| 日本久久久a级免费| 国产黄色大片在线观看| 久久精品国产96久久久香蕉| 国产一级在线| 日韩黄色av网站| 亚洲精品18p| 91精品国产乱码| 一本一道精品欧美中文字幕| 色视频一区二区| 国产精品久久久久久99| 亚洲午夜在线观看视频在线| www青青草原| 亚洲图片你懂的| 久久中文字幕精品| 久久久蜜桃精品| 国产男男chinese网站| 99在线视频精品| 老司机午夜免费福利| 国产丶欧美丶日本不卡视频| 国产999免费视频| 国产综合色精品一区二区三区| 亚洲欧洲日本精品| 美女视频第一区二区三区免费观看网站| 啊啊啊一区二区| 亚洲一区日本| 国产精品-区区久久久狼| 国产精品毛片在线| 男女激情无遮挡| 亚洲一区二区免费看| 黄色片久久久久| 久久九九99| 欧美一级黄色影院| 日本伊人色综合网| 欧美成人福利在线观看| 久久精品国产秦先生| 中文字幕国产高清| 国产精品自产自拍| 日本美女视频网站| 99久久婷婷国产综合精品电影| 成人网站免费观看| 久久蜜桃av一区二区天堂| 久久久视频6r| 中文字幕日韩一区二区| 欧美黄色免费看| 亚洲v精品v日韩v欧美v专区| 国产精品久久久久久久妇| 色综合久久88色综合天天免费| 国产精品久久久久久久久久精爆| 在线一区二区三区四区| 一级黄色大毛片| 日韩精品中文字幕一区二区三区| 蜜臀久久久久久999| 亚洲美女黄色片| 秋霞午夜在线观看| 欧美风情在线观看| 345成人影院| 国产色视频一区| jizz国产精品| 茄子视频成人在线观看| 香蕉久久网站| 亚洲熟妇无码一区二区三区导航| 久久最新视频| 超碰91在线播放| 91天堂素人约啪| 美国美女黄色片| 亚洲在线免费播放| 免费黄色片视频| 日韩一区国产二区欧美三区| 日韩精品系列| 大胆欧美人体视频| 超碰超碰人人人人精品| 91日韩在线视频| 羞羞答答一区二区| 亚洲小视频在线播放| 亚洲专区一区| 欧美xxxxxbbbbb| 久久色成人在线| 欧美黑人精品一区二区不卡| 色网站国产精品| 人妻偷人精品一区二区三区| 日韩在线观看网址| 亚洲欧美电影| 国产富婆一区二区三区 | av不卡免费在线观看| 女人裸体性做爰全过| 精品久久久免费| 国产夫妻在线观看| 中文字幕一精品亚洲无线一区| 国产精品蜜芽在线观看| 亚洲精品免费av| 欧美呦呦网站| 凹凸国产熟女精品视频| 粉嫩高潮美女一区二区三区| 老司机精品免费视频| 欧美日韩在线另类| www.日本在线观看| 综合久久五月天| 国偷自产一区二区免费视频 | 亚洲免费一级片| 久久精品成人欧美大片古装| 精品视频一区二区三区四区五区| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 国产一区二区三区免费观看| 欧美黄色一级生活片| 黑人巨大精品欧美一区二区免费| 亚洲av少妇一区二区在线观看 | av伦理在线| 3d蒂法精品啪啪一区二区免费| 99精品综合| 污片在线免费看| 国产色91在线| 精品久久久久久久久久久久久久久久 | 亚洲精品视频在线观看网站| 在线观看视频二区| 国产亚洲视频在线| 日本欧美日韩| 欧美日本亚洲| 久久久久久黄| 欧美成人国产精品一区二区| 欧美视频一区二区三区…| 亚洲 另类 春色 国产| 午夜伦理精品一区| 红杏成人性视频免费看| 五十路熟女丰满大屁股| av不卡一区二区三区| 亚洲 欧美 日韩 综合| 日韩精品久久久久| 亚洲妇女成熟| 欧洲久久久久久| 日韩av高清在线观看| 国产又黄又粗视频| 欧美少妇一区二区| 久草中文在线| 3d动漫精品啪啪一区二区三区免费 | 四虎在线精品| 蜜桃视频一区二区在线观看| 国产成人在线视频免费播放| 国产一级二级三级视频| 精品欧美一区二区久久| zzzwww在线看片免费| 久久综合久久综合这里只有精品| 久久一区二区三区四区五区| 性猛交ⅹxxx富婆video| 欧美挠脚心视频网站| www.久久ai| 精品无人区一区二区三区竹菊| 另类天堂av| 欧美福利在线视频| 91精品国产高清一区二区三区蜜臀 | 日日躁夜夜躁白天躁晚上躁91| 97av在线播放| 成人看的视频| 久久久国产精品久久久| 黄色成人av网| 中文字幕在线免费| 亚洲一区二区中文字幕| 亚洲茄子视频| 美国黄色特级片| 日韩精品一区二| 欧美xoxoxo| 四虎免费在线观看视频| av一本久道久久综合久久鬼色| 四虎影院在线免费播放| 久久久国产成人精品| 精品午夜电影| 亚洲少妇久久久| 亚洲成人免费av| 91成人高清| 黄色99视频| 狠狠v欧美v日韩v亚洲ⅴ| 国产无套粉嫩白浆内谢| 伊人久久久久久久久久| 91精品丝袜国产高跟在线| 十八禁视频网站在线观看| 一区二区三区蜜桃网| 成人激情电影在线看| 超碰97国产在线| 琪琪一区二区三区| 五月天婷婷综合网| 日韩视频免费中文字幕| 免费短视频成人日韩|