您現在的位置: 365建站網 > 365學習 > MYSQL解決where in過多值索引不生效的解決方法(強制索引force index)

MYSQL解決where in過多值索引不生效的解決方法(強制索引force index)

文章來源:365jz.com     點擊數:126    更新時間:2022-04-29 17:30   參與評論

      用戶反映MYSQL中某個表前端查詢很慢,前端顯示需要10多秒,于是我方把監控到的SQL語句執行查詢,結果如下:

SELECT
 sum(num)FROM
 `user_coin_log` force index (ix_5)WHERE
 `create_time` >= 1584892800AND `create_time` < 1584979200AND `source` = 5AND `uid` IN (
 23,
 24,
 26,
 29,
 32,
 33,
 38,
 42,
 52,
 59,
 68,
 69,
 71,
 72,
 73,
 79,
 83,
 85,
 108,
 111,
 139,
 229,
 261,
 280,
 281,
 283,
 296,
 298,
 308,
 401,
 423,
 490,
 523,
 650,
 653,
 776,
 903,
 913,
 966,
 997,
 1030,
 1381,
 1704,
 1809,
 1922,
 1943,
 2011,
 2037,
 2146,
 2459,
 2757,
 3055,
 3087,
 3098,
 3280,
 3315,
 3427,
 3701,
 5132,
 5625,
 6646,
 7628,
 8040,
 8464,
 23304)AND `coin_id` = 1LIMIT 1

在這里插入圖片描述
       執行時間需要5.466S,于是分析這個SQL語句,從語句的結構來看,where條件有時間create_time,uid等條件過濾,直覺應該不至于如此慢,而且該表上是有一個索引ix_5,同時覆蓋了create_time,uid,source,coin_id,num等列的,但此SQL執行計劃并沒有走這個索引,而是走了一個單列索引UID不太合理,于是經過多方面排查與嘗試,如果把這個UID條件去掉,或把UID里面的列表值大量減少,這個時候會走ix_5索引,甚至如果讓uid in一個臨時表(把所有的uid值建成1個臨時表),這個時候也會走ix_5索引,執行時間會在0.8s內!
       順著這個方向繼續排查,發現網上有不少類似的案例,其現象都是:in后面如有太多值,MYSQL會認為全面掃描會更有效率,看來這一點還是不夠oracle的優化器智能??!于是嘗試采用強制索引的方案來解決,具體加上(force index (ix_5))后,語句變成:

SELECT
 sum(num)FROM
 `user_coin_log` force index (ix_5) WHERE
 `create_time` >= 1584892800AND `create_time` < 1584979200AND `source` = 5AND `uid` IN (
 23,
 24,
 26,
 29,
 32,
 33,
 38,
 42,
 52,
 59,
 68,
 69,
 71,
 72,
 73,
 79,
 83,
 85,
 108,
 111,
 139,
 229,
 261,
 280,
 281,
 283,
 296,
 298,
 308,
 401,
 423,
 490,
 523,
 650,
 653,
 776,
 903,
 913,
 966,
 997,
 1030,
 1381,
 1704,
 1809,
 1922,
 1943,
 2011,
 2037,
 2146,
 2459,
 2757,
 3055,
 3087,
 3098,
 3280,
 3315,
 3427,
 3701,
 5132,
 5625,
 6646,
 7628,
 8040,
 8464,
 23304) AND `coin_id` = 1LIMIT 1

再次執行:
在這里插入圖片描述
加上HINT后,SQL效率得到了10倍以上的提升,由原來的5.4S下降到0.3S,性能提升效果顯著!

如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇


發表評論 (126人查看,0條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
------分隔線----------------------------
自拍偷拍福力视频,偷拍国际精品,麻豆一区福利电影,国产网红视频午夜福利,se视频大全,久久国产AV影院 少妇人妻无码专区在线视频| 曰本人牲交免费视频| 亚洲av日韩av不卡在线观看| 无码国产成人午夜电影在线观看| av一本大道香蕉大在线| 公众面前强制强伦姧波多野结衣| 国产又色又爽又黄刺激免费观看| 欧美成人免费观看aⅤ| 欧洲美女开放牲交视频| 永久免费av无码网站bt| 两个人的视频全免费高清bd| 亚洲高清无码在线 视频| 女用夫妻性快活器| 亚洲国产在线二区三区| 欧美在线观看| av网站免费线看精品| 野花视频在线观看最新| 美女四肢被绑在床扒衣| 亚洲熟女中文字幕男人总站| 欧洲美女与动交z0z0z| 亚洲龙腾成小说人网| 欧美欧洲成本大片免费| 宝贝乖好紧夹得我好爽| 曰本女人牲交全视频免费播放| 美女视频免费高清视频| 私人玩物裸体无圣光扒内裤| 天堂av色综合久久天堂| 久久不卡日韩美女| 神马影视在线2018| 放荡的美妇欧美在线播放| 黑人巨大超大videos-hd| http://www.glamxer.com