日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

發(fā)布時(shí)間:2023/12/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【環(huán)境介紹】

云數(shù)據(jù)庫(kù)MySQL 5.7

【背景描述】

業(yè)務(wù)需要:需要對(duì)16370077的表數(shù)據(jù)進(jìn)行更新部分?jǐn)?shù)據(jù)操作

UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = 1 WHERE FREG_ID IN (SELECT FREG_ID FROM P_MOXXXX_REXXXX_UPDATE_TEMP);

【按照正常流程更新數(shù)據(jù)操作】

使用archery的SQL審核工具進(jìn)行提單操作,操作超過(guò)10分多鐘,最后使用kill會(huì)話暫停操作,

SQL為子查詢更新數(shù)據(jù)操作,業(yè)務(wù)反饋查詢數(shù)據(jù)很快,從更新操作看執(zhí)行很久時(shí)間:

臨時(shí)使用具體的條件值進(jìn)行更新操作執(zhí)行很快:

【分析更新慢問(wèn)題】

從查看SQL看為子查詢更新數(shù)據(jù)操作,查看官方對(duì)子查詢的解釋:

官方解釋數(shù)據(jù)庫(kù)子查詢很明確,更新,刪除數(shù)據(jù)不能使用到半連接或者優(yōu)化子查詢方式優(yōu)化,建議使用連接方式執(zhí)行SQL。

semijoin實(shí)現(xiàn)策略

業(yè)務(wù)反饋查詢數(shù)據(jù)很快,查看對(duì)應(yīng)的執(zhí)行計(jì)劃信息,從執(zhí)行計(jì)劃中就可以馬上看出問(wèn)題,掃描數(shù)據(jù)跟驅(qū)動(dòng)表很大的差別:

查詢的執(zhí)行計(jì)

從執(zhí)行計(jì)劃看,臨時(shí)表作為驅(qū)動(dòng)表,使用索引主鍵,從extra列看,使用了semijoin Duplicate Weedout?策略優(yōu)化子查詢;

update的執(zhí)行計(jì)劃:

從執(zhí)行計(jì)劃看,不能優(yōu)化成semijoin子查詢,并且是一個(gè)相關(guān)子查詢,會(huì)被優(yōu)化器轉(zhuǎn)為?exists相關(guān)子查詢進(jìn)行查詢(select_type:DEPENDENT SUBQUERY),會(huì)根據(jù)外查詢結(jié)果執(zhí)行很多次;

【解決方法】

update/delete 無(wú)法使用 semijoin、materialization 優(yōu)化策略,會(huì)以 exists 方式執(zhí)行,外查詢必須要進(jìn)行全表掃描。

優(yōu)化的方法,改成 join 即可方式更新數(shù)據(jù)操作;

查看執(zhí)行計(jì)劃及更新操作:

從執(zhí)行時(shí)間看執(zhí)行了15.34秒

【參考資料】

https://dev.mysql.com/doc/refman/5.7/en/subquery-optimization.html

https://opensource.actionsky.com/20200628-mysql/

https://opensource.actionsky.com/20210202-explain/

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。