以下查询从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"
答案 0 :(得分:1)
您可以尝试在查询中使用的所有列上添加索引:
ALTER TABLE nv ADD INDEX lnv(lid,nid,nview)
以便mysql使用索引中的列值而不是仅使用索引进行行查找。您应该在解释额外列中看到其他using index
。它可能会加快你的查询速度,但不要指望很多,在这种情况下,如果不改变表模式,文件输出是不可避免的。
如果您决定使用此索引,则可以安全地删除单个lid
列上的索引,因为复合索引也可以用于盖子查找。
答案 1 :(得分:0)
您只为索引列编制索引,是否可以向nid列添加索引并验证查询执行时间