优化mysql慢查询

问题描述:

查询时间超过2.5秒从20lacs记录运行;优化mysql慢查询

 
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" 
+3

运行'SHOW CREATE TABLE view_cnt'和'EXPLAIN SELECT ..(yourquery)..'并将结果包含在您的问题中。 – Kaii 2012-04-26 13:42:21

+0

你的'ORDER BY'子句似乎也很可疑,你可能想用'ORDER BY view_cnt'来代替? – Romain 2012-04-26 13:44:25

+0

我给EXPLAIN FOR SELECT查询更新上面 – sas 2012-04-26 13:50:45

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

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

所以mysql使用来自索引的列值,而不是仅对索引查找使用索引。您应该在您的说明额外栏中看到额外的using index。它可能可能会加快你的查询速度,但不要期待太多,在这种情况下,不改变表格模式的情况下,filesort是不可避免的。

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

+0

它的作品,谢谢piotrm – sas 2012-04-27 07:08:04

你索引只盖列,你能添加索引NID列,并验证查询执行时间

+0

我已更新索引为NID然后我再给EXPLAIN同样的结果只显示,NID不显示在可能的键列 – sas 2012-04-26 14:25:31