一个mysql查询的优化

SELECTCOUNT(1)asnum,uid,sid,usernameFROMsd_usersGROUPBYsidHAVINGnum>1ORDERBYnumDESC
在实际测试中发现由于数据量超过60万在group的时候就产生了巨大的威胁力,查询执行缓慢
一直停留在copytmptable下
explain发现需要重建索引导致请问类似的语句应该如何优化
+----+-------------+-----------+-------+---------------+-----+---------+------+--------+---------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-----------+-------+---------------+-----+---------+------+--------+---------------------------------+
|1|SIMPLE|sd_users|index|NULL|sid|97|NULL|539029|Usingtemporary;Usingfilesort|
+----+-------------+-----------+-------+---------------+-----+---------+------+--------+---------------------------------+
1rowinset
尚方宝剑之说
浏览 389回答 2
2回答

海绵宝宝撒

没走索引,全表扫描外加临时表排序……最起码要有个sid的索引吧。有了sid的索引之后:另外你这个语句里的uid,username确定有意义么?同一个sid里面的uid,username都一样?如果去掉uid,username的话,这个sql就只走索引不会去回表应该有比较大的提升。

慕斯709654

首先如@gmase所言,确保sid字段有索引。其次因为这是一个全表扫描的统计查询,所以性能消耗确实会比较大,如果实在撑不住,可以考虑创建一个包含sid和count两个字段的中间表,然后及时更新它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript