mysql - 优化mysql慢查询

标签 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"

最佳答案

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

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

以便 mysql 使用索引中的列值,而不是仅使用索引进行行查找。您应该在解释额外列中看到额外的使用索引。它可能可以稍微加快您的查询速度,但不要期望太多,在这种情况下,在不更改表架构的情况下,文件排序是不可避免的。

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

关于mysql - 优化mysql慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334679/

相关文章:

mysql - SORM 和 trait 作为字段类型

php - 如何使用 codeigniter 从我的表字段中显示计数结果

php - 循环通过 MySQL 左加入 php 与 2 个单独的查询

mysql - 什么时候应该使用 MySQL TEXT 字段而不是文件?

c++ - 计算装配错误率的工具

Mysql/PDO - 设置变量

javascript - 在大量对象中改变单个对象属性的最快方法是什么?

algorithm - 增加一组数字,使 XOR 和为 0

mysql - Speedwise,日期时间或时间戳哪个更好?

c++ - IIR滤波器的优化