优化mysql慢查询

时间:2012-04-26 13:40:51

标签: mysql optimization

以下查询从20lacs记录运行超过2.5秒;

SELECT lid,nid ,sum(nview) as view_cnt 
FROM nv 
WHERE  lid = 1 
GROUP BY nid
ORDER BY view_cnt desc 
LIMIT 20;

我将可能的密钥更新为索引,请帮我优化此查询

id  select_type table   type    possible_keys    key        key_len ref      rows    Extra
1   SIMPLE      nv      ref     lid              lid        4       const    406282  "Using where; Using temporary; Using filesort"

2 个答案:

答案 0 :(得分:1)

您可以尝试在查询中使用的所有列上添加索引:

ALTER TABLE nv ADD INDEX lnv(lid,nid,nview)

以便mysql使用索引中的列值而不是仅使用索引进行行查找。您应该在解释额外列中看到其他using index。它可能会加快你的查询速度,但不要指望很多,在这种情况下,如果不改变表模式,文件输出是不可避免的。

如果您决定使用此索引,则可以安全地删除单个lid列上的索引,因为复合索引也可以用于盖子查找。

答案 1 :(得分:0)

您只为索引列编制索引,是否可以向nid列添加索引并验证查询执行时间