以下查询从 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"
最佳答案
您可以尝试在查询中使用的所有列上添加索引:
ALTER TABLE nv ADD INDEX lnv(lid,nid,nview)
以便 mysql 使用索引中的列值,而不是仅使用索引进行行查找。您应该在解释额外列中看到额外的使用索引
。它可能可以稍微加快您的查询速度,但不要期望太多,在这种情况下,在不更改表架构的情况下,文件排序是不可避免的。
如果您决定使用此索引,您可以安全地删除单个 lid
列上的索引,因为复合列也可用于盖子查找。
关于mysql - 优化mysql慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334679/