亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

把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

固阳县| 乌苏市| 延庆县| 九龙坡区| 石家庄市| 本溪| 栾城县| 邮箱| 雅江县| 云浮市| 会昌县| 余干县| 若羌县| 含山县| 台南市| 宣城市| 乃东县| 西青区| 旺苍县| 梨树县| 新津县| 三原县| 莎车县| 辉南县| 龙泉市| 鄂州市| 钦州市| 襄樊市| 周口市| 安陆市| 进贤县| 南安市| 故城县| 岚皋县| 屏山县| 莲花县| 宝坻区| 荔波县| 光泽县| 屏南县| 扎囊县|