mysql创建临时表慢_mysql临时表产生的执行效率问题改进(转)

本文记录了一次线上MySQL查询优化的过程,原先的SQL语句由于使用临时表导致执行缓慢。通过调整SQL结构,避免使用临时表,执行效率提升了12倍。解释了MySQL临时表的内存与磁盘存储、何时使用以及如何避免和优化临时表,提供了SQL优化的建议。
摘要由CSDN通过智能技术生成

问题:

近日,线上MySQL查出一个慢sql,每次都要查询1000ms以上,严重影响用户体验

今得空去诊断一番,记录如下:

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;

解决问题:

由于对数据库优化一知半解,完全无从下手,只能求助度娘和谷哥了,试验了各种方法,都不见效果

几番周折之后,最终把注意力集中到了临时表上,因为explain查看执行计划,可以看到Using temporary

MySQL在执行SQL查询时可能会用到临时表,一般情况下,用到临时表就意味着性能较低。

于是想办法修改sql语句,摒弃临时表,修改如下:

SELECT r.object_id AS cardId, 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值