问题描述:
某条sql语句在测试环境执行只需要1秒不到,到了生产环境执行需要8秒以上
在phpmyadmin里面执行性能分析,发现sending data占用了差不多90%以上的时间
查询一下“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.l