中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

把not in 改成not exists后的優化

發布時間:2020-08-11 21:09:49 來源:ITPUB博客 閱讀:334 作者:czxin788 欄目:MySQL數據庫
 
把not in 改成not exists后的優化

近期,OA數據庫里面存在一條慢SQL,其執行時間為3分16秒。這條慢SQL語句每個月可能會運行幾次,但其運行后,總會導致數據庫CPU利用率飆升。然后我就對這個慢SQL語句進行了改寫測試,改寫后的運行時間降為13s(雖然還是很慢,但已經速度提升了18倍)。




具體分析過程如下:
通過慢日志捕捉到的慢SQL及其運行時間:
1 select id,start_member_id,start_date,modify_member_id,modify_date from formmain_0141 where id not in (select content_data_id from ctp_content_all where content_template_id='6890363387462501722' and content_data_id is not null  ) limit 20000, 10000\G
Empty set (3 min 2.01 sec)

可見,生產中,該語句運行時間是3分2秒。

我們來看看其執行計劃,為什么這么慢:

把not in 改成not exists后的優化
把not in 改成not exists后的優化



2、我改寫后的索引,用的是 not exists ,內外交互式子查詢:

mysql> select id,start_member_id,start_date,modify_member_id,modify_date from formmain_0141 where not exists (select 1 from ctp_content_all where content_data_id= formmain_0141.id and content_data_id is not null and content_template_id='6890363387462501722') limit 20000, 10000 ;
Empty set (
13.84 sec)

看到用not exists后,執行時間降到13秒,效率有顯著提升。

我們再看一下優化后語句的執行計劃:
把not in 改成not exists后的優化


把not in 改成not exists后的優化

把not in改寫為not exists快的原因,我想用mysql 5.6的新特性ICP的原理來解釋,在改寫后的sql語句中,MySQL在從 ctp_content_all表中取出數據的同時,就開始判斷是否可以在formmain_0141表中進行id過濾,從而大大減少了上層對SQL層的記錄索引,提高數據庫整體性能。
反觀優化前的那條sql語句,它是把 ctp_content_all 表里面所有符合條件的記錄都取出來后,再到 formmain_0141表里進行id字段過濾,所以慢。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭水| 南昌市| 大庆市| 周至县| 金堂县| 登封市| 海伦市| 麟游县| 新蔡县| 丹寨县| 平泉县| 滨州市| 麦盖提县| 贵溪市| 石嘴山市| 龙南县| 嘉禾县| 道孚县| 辛集市| 桐城市| 东阳市| 淮南市| 佳木斯市| 茂名市| 炎陵县| 广东省| 随州市| 连江县| 永嘉县| 汉沽区| 雷山县| 双城市| 兴海县| 新密市| 无极县| 余庆县| 鲜城| 东兴市| 临泽县| 三亚市| 启东市|