91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

把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

曲水县| 桂林市| 那坡县| 利川市| 阿拉善盟| 汝南县| 盐津县| 察隅县| 宜君县| 徐闻县| 乾安县| 静海县| 镇远县| 万载县| 泾源县| 鹤峰县| 鹿泉市| 合肥市| 伊宁县| 溧水县| 泸定县| 新民市| 潼南县| 高台县| 吕梁市| 铁岭市| 射阳县| 瓦房店市| 武宁县| 巴东县| 洪江市| 登封市| 海门市| 齐齐哈尔市| 拜城县| 岚皋县| 隆安县| 萍乡市| 礼泉县| 汉寿县| 东光县|