查询一下“Sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。
这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。
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