Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化mysql慢速查询_Mysql_Optimization - Fatal编程技术网

优化mysql慢速查询

优化mysql慢速查询,mysql,optimization,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; 选择lid、nid、sum(nview)作为视图 来自内华达州 其中lid=1 nid分组 按视图排序\u cnt desc 上限20; 我将可能的键更新为索引,请帮助我优化此查询 id select_type table t

以下查询从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; 选择lid、nid、sum(nview)作为视图 来自内华达州 其中lid=1 nid分组 按视图排序\u cnt desc 上限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" id选择\u类型表类型可能的\u键\u长度参考行额外 1简单nv ref lid 4 const 406282“使用where;使用temporary;使用filesort”
您只为lid列编制了索引,是否可以将索引添加到nid列并验证查询执行时间

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

ALTER TABLE nv ADD INDEX lnv(lid,nid,nview)
因此,mysql使用索引中的列值,而不是仅在行查找中使用索引。您应该在“解释额外”列中看到使用索引的附加
。它可能会稍微加快查询速度,但不要期望太多,在这种情况下,如果不更改表模式,filesort是不可避免的


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

运行
SHOW CREATE TABLE view_cnt
EXPLAIN SELECT..(您的查询)
并将结果包括在您的问题中。
ORDER BY
子句也似乎可疑,您可能想改为按视图排序?我给出了SELECT查询更新的解释above@romain:同样,我对按条款订购有问题,
nid
一个
lid
平均有多少种不同的
nid?
orderby
子句需要执行
filesort
操作,如果要排序的行太多,这会非常慢。我已更新了nid的索引,然后我再次给出解释,相同的结果仅显示,nid不显示在可能的键列中