日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql临时表好处和坏处_mysql临时表产生的执行效率问题改进(转)

發(fā)布時(shí)間:2025/3/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql临时表好处和坏处_mysql临时表产生的执行效率问题改进(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題:

近日,線上MySQL查出一個(gè)慢sql,每次都要查詢1000ms以上,嚴(yán)重影響用戶體驗(yàn)

今得空去診斷一番,記錄如下:

sql原句:

SELECT?r.object_id?AS?cardId,?count(1)?AS?attachs?FROM?hzresource_object?r

LEFT?JOIN

(?SELECT?card_id?FROM?card_member?WHERE?user_id?=?#uid#?and?card_member.deleted=0

UNION

SELECT?card_id?FROM?card_subscribed?where?user_id?=?#uid#?and?card_subscribed.deleted=0

)?m?ON?r.object_id?=?m.card_id

WHERE?r.object_type?=?#objectType#?AND?r.deleted?=?0

GROUP?BY?r.object_id;

解決問題:

由于對(duì)數(shù)據(jù)庫優(yōu)化一知半解,完全無從下手,只能求助度娘和谷哥了,試驗(yàn)了各種方法,都不見效果

幾番周折之后,最終把注意力集中到了臨時(shí)表上,因?yàn)閑xplain查看執(zhí)行計(jì)劃,可以看到Using temporary

MySQL在執(zhí)行SQL查詢時(shí)可能會(huì)用到臨時(shí)表,一般情況下,用到臨時(shí)表就意味著性能較低。

于是想辦法修改sql語句,摒棄臨時(shí)表,修改如下:

SELECT?r.object_id?AS?cardId,?count(1)?AS?attachs?FROM?hzresource_object?r

WHERE?r.object_type?=?#objectType#??AND?r.deleted?=?0?and?r.object_id?in?(

SELECT?card_id?FROM?card_member?WHERE?user_id?=?#uid#?and?card_member.deleted=0

UNION

SELECT?card_id?FROM?card_subscribed?where?user_id?=?#uid#?and?card_subscribed.deleted=0

)

GROUP?BY?r.object_id;

即把語句給拆分成兩個(gè)sql語,用in操作拼接

本機(jī)測試:

優(yōu)化前執(zhí)行時(shí)間1040ms,優(yōu)化后執(zhí)行時(shí)間:85ms,執(zhí)行速度是原來的12倍多!贊

PS:

常理我們都會(huì)排斥用in操作,用union替換,那為什么這里用in會(huì)更快呢?

帶著問題,接著去網(wǎng)上找,原來:

sql執(zhí)行會(huì)生成一個(gè)巨大的臨時(shí)表,當(dāng)內(nèi)存放不下時(shí),要全部copy 到磁盤,導(dǎo)致IO飆升,時(shí)間開銷增大。

額外收獲知識(shí)收藏如下:

臨時(shí)表存儲(chǔ)

MySQL臨時(shí)表分為“內(nèi)存臨時(shí)表”和“磁盤臨時(shí)表”,其中內(nèi)存臨時(shí)表使用MySQL的MEMORY存儲(chǔ)引擎,磁盤臨時(shí)表使用MySQL的MyISAM存儲(chǔ)引擎;

一般情況下,MySQL會(huì)先創(chuàng)建內(nèi)存臨時(shí)表,但內(nèi)存臨時(shí)表超過配置指定的值后,MySQL會(huì)將內(nèi)存臨時(shí)表導(dǎo)出到磁盤臨時(shí)表;

使用臨時(shí)表的場景

1)ORDER BY子句和GROUP BY子句不同, 例如:ORDERY BY price GROUP BY name;

2)在JOIN查詢中,ORDER BY或者GROUP BY使用了不是第一個(gè)表的列 例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by TableB.name

3)ORDER BY中使用了DISTINCT關(guān)鍵字 ORDERY BY DISTINCT(price)

4)SELECT語句中指定了SQL_SMALL_RESULT關(guān)鍵字 SQL_SMALL_RESULT的意思就是告訴MySQL,結(jié)果會(huì)很小,請(qǐng)直接使用內(nèi)存臨時(shí)表,不需要使用索引排序 SQL_SMALL_RESULT必須和GROUP BY、DISTINCT或DISTINCTROW一起使用 一般情況下,我們沒有必要使用這個(gè)選項(xiàng),讓MySQL服務(wù)器選擇即可。

直接使用磁盤臨時(shí)表的場景

1)表包含TEXT或者BLOB列;

2)GROUP BY 或者 DISTINCT 子句中包含長度大于512字節(jié)的列;

3)使用UNION或者UNION ALL時(shí),SELECT子句中包含大于512字節(jié)的列;

表的設(shè)計(jì)原則

使用臨時(shí)表一般都意味著性能比較低,特別是使用磁盤臨時(shí)表,性能更慢,因此我們?cè)趯?shí)際應(yīng)用中應(yīng)該盡量避免臨時(shí)表的使用。 常見的避免臨時(shí)表的方法有:

1)創(chuàng)建索引:在ORDER BY或者GROUP BY的列上創(chuàng)建索引;

2)分拆很長的列:一般情況下,TEXT、BLOB,大于512字節(jié)的字符串,基本上都是為了顯示信息,而不會(huì)用于查詢條件, 因此表設(shè)計(jì)的時(shí)候,應(yīng)該將這些列獨(dú)立到另外一張表。

SQL優(yōu)化

如果表的設(shè)計(jì)已經(jīng)確定,修改比較困難,那么也可以通過優(yōu)化SQL語句來減少臨時(shí)表的大小,以提升SQL執(zhí)行效率。

常見的優(yōu)化SQL語句方法如下:

1)拆分SQL語句

臨時(shí)表主要是用于排序和分組,很多業(yè)務(wù)都是要求排序后再取出詳細(xì)的分頁數(shù)據(jù),這種情況下可以將排序和取出詳細(xì)數(shù)據(jù)拆分成不同的SQL,以降低排序或分組時(shí)臨時(shí)表的大小,提升排序和分組的效率,我們的案例就是采用這種方法。

2)優(yōu)化業(yè)務(wù),去掉排序分組等操作

有時(shí)候業(yè)務(wù)其實(shí)并不需要排序或分組,僅僅是為了好看或者閱讀方便而進(jìn)行了排序,例如數(shù)據(jù)導(dǎo)出、數(shù)據(jù)查詢等操作,這種情況下去掉排序和分組對(duì)業(yè)務(wù)也沒有多大影響。

如何判斷使用了臨時(shí)表?

使用explain查看執(zhí)行計(jì)劃,Extra列看到Using temporary就意味著使用了臨時(shí)表。

小結(jié):

可見, 完全顛覆了對(duì)in操作符的認(rèn)識(shí),凡事兒都是要分情況討論的

總結(jié)

以上是生活随笔為你收集整理的mysql临时表好处和坏处_mysql临时表产生的执行效率问题改进(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲天堂网一区二区 | 尤果网福利视频在线观看 | 亚洲色精品三区二区一区 | 一道本无吗一区 | 国产一区二区三区影院 | 国产精品视频播放 | 强伦人妻一区二区三区视频18 | 黄色a级片| 黄金网站在线观看 | 亚洲国产精品综合 | 少女国产免费观看 | 欧美日韩不卡一区二区三区 | 中文字幕在线观看二区 | 麻豆视频网站在线观看 | 波多野结衣中文在线 | 成人av一区二区三区在线观看 | 一级黄色电影片 | 国产视频欧美 | 韩日av一区二区 | jzzjzzjzz亚洲成熟少妇 | 成人h片在线观看 | 日韩三级在线 | 亚洲成人免费在线 | 日韩三级在线播放 | 麻豆chinese极品少妇 | 舌奴调教日记 | 国产精品一区三区 | 奇米影视第四色首页 | 2019亚洲天堂 | 欧美性生活在线视频 | 欧美性生活一级 | 一级女人毛片 | 嫩草影院在线观看视频 | 久久天堂av | 高清在线一区二区三区 | 亚洲成人第一网站 | 亚洲欧美一二三区 | 末发成年娇小性xxxxx | 亚洲天堂免费观看 | 亚洲蜜桃av | 国产成人综合在线 | 亚洲色偷偷色噜噜狠狠99网 | 亚洲青青操 | 国产免费一区二区三区 | 亚洲三级电影 | 在线免费国产视频 | 噜噜吧噜噜色 | 久久狠 | 亚洲日本精品视频 | 色婷婷aⅴ | 欧美福利视频一区二区 | 久久久久久久综合色一本 | 久久精品色欲国产AV一区二区 | 粗大黑人巨茎大战欧美成人免费看 | 欧美美女在线 | 亚洲性精品 | 欧美日韩国产一区二区三区在线观看 | 五月婷婷视频 | 精品视频一区二区三区四区五区 | 精品三级国产 | 国产aaa| 黄色国产大片 | missav | 免费高清av在线看 | 午夜看看 | 免费在线观看黄网 | 亚洲av永久无码国产精品久久 | av成人在线免费观看 | 97久久人国产精品婷婷 | 91麻豆免费视频 | 青娱乐国产盛宴 | 瑟瑟在线视频 | 日本a级c片免费看三区 | 一区二区不卡免费视频 | 婷婷激情图片 | 拍国产真实乱人偷精品 | 日本污视频在线观看 | 8x8x最新网址| 日韩无砖| 国产精品久久久久久久av福利 | 动漫裸体无遮挡 | 动漫精品一区一码二码三码四码 | 欧美日本在线观看 | 天天摸夜夜添狠狠添婷婷 | 熟妇人妻系列aⅴ无码专区友真希 | 九一精品在线 | 成人做爰66片免费看网站 | 爱爱15p | 色av导航 | 国内av免费 | 91丨porny| 微拍福利一区二区 | 国产玖玖 | wwyoujizzcom| 国产农村老头老太视频 | 中文字幕11页中文字幕11页 | 黑人玩弄人妻一区二区三区免费看 | 北条麻妃一区二区三区四区五区 | 日韩中文字幕久久 | 欧美精品久久久久久久 |