mysql sending data_mysql查询sending data占用大量时间的问题处理

问题描述:

某条sql语句在测试环境执行只需要1秒不到,到了生产环境执行需要8秒以上

在phpmyadmin里面执行性能分析,发现sending data占用了差不多90%以上的时间

4ee93d322fb0300c9892538406d639f0.png

查询一下“Sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。

这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。

猜测可能是索引没有添加正确,于是采用

explain分析方法,在查询语句前添加expain,如下可以在phpadmin里面执行,也可以在navicat中执行:

explain SELECT

a.media_id,

a.user_id,

a.media_type,

a.title,

a.media_url,

a.description,

a.cover_url,

a.like_count,

a.play_count,

a.reply_count,

a.relay_count,

a.share_count,

a.length,

a.width,

a.length_time,

a.STATUS,

a.verification,

a.encapsulate_status,

a.create_time,

a.update_time,

a.audit_time,

CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END niuren,

c.coefficient,

CASE WHEN d.id IS NOT NULL THEN 1 ELSE 0 END remen,

d.coefficient coefficientReMen,

b.nickname,

p.official,

p.theme_id,

p.theme_name,

u.size

FROM

tbl_media_info a

LEFT JOIN tbl_user_info b ON a.user_id=b.user_id

LEFT JOIN tbl_ranking_config c ON c.media_id=a.media_id AND c.type=3

LEFT JOIN tbl_ranking_config d ON d.media_id=a.media_id AND d.type=2

LEFT JOIN tbl_media_theme_config t ON a.media_id = t.media_id

LEFT JOIN tbl_theme_info p ON t.theme_id = p.theme_id

LEFT JOIN tbl_upload_status u ON u.url = a.media_url

GROUP BY a.media_id

order by a.create_time desc limit 0,20

47e8ff013ec32635c7caae027ad2cf20.png

c9fb7c06dde6e40f660f7ae5a555562c.png

通过explain查询分析,可以看到结果中possible_keys为空,说明没有用到索引

LEFT JOIN tbl_media_info t5 ON t1.user_id = t5.user_id,而这个关联查询用到了user_id,需要在这个字段上添加索引

299e188fcfc3efaa1be0498ee888b2fb.png

添加索引,问题解决,查询只需要0.5秒左右

1df5c743e1b6c24f9f95d0989b490c21.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值