Mysql查询提高性能

时间:2011-10-07 13:34:24

标签: php mysql indexing

我有以下查询:

SELECT COUNT(sid),fDate,COUNT(DISTINCT(cid)) 
    FROM forwarding  
    WHERE fDate BETWEEN "2011-06-01" AND "2011-06-30" 
    GROUP BY fDate

解释给我以下输出:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  forwarding  index   fDate,fDate_2   fDate_2 3       1481127 Using where

你可以看到有很多数据。 总工作时间为12秒。 我该如何改善表现?我不知道在设置索引时我能做些什么。

这张表有我的索引:

fDate (fDate, f_shop)
fDate2(dDate),
f_shop(f_shop)

感谢您的帮助。

更新:

现在我在where子句中添加了一个列,查询比以前慢得多。

SELECT COUNT(sid),fDate,COUNT(DISTINCT(cid)) FROM forwarding 
WHERE fDate BETWEEN "2011-06-01" AND "2011-06-30"  AND f_shop=10077 GROUP BY fDate

我有一个关于forwardDate和f_shop的索引,但性能会变慢。什么是完美的解决方案? 谢谢

2 个答案:

答案 0 :(得分:3)

除了ypercube提供的答案,您在查询特定商店的查询...我会有一个索引

(f_shop,fdate,cid)确保索引的所有3个部分都与前面最小的WHERE子句限定符一起使用..在上一个示例中,您已经包含了对特定商店的兴趣......

SELECT 
      COUNT(sid),
      fDate,
      COUNT(DISTINCT(cid)) 
   FROM 
      forwarding 
   WHERE 
          f_shop=10077 
      AND fDate BETWEEN "2011-06-01" AND "2011-06-30"
   GROUP BY 
      fDate

答案 1 :(得分:2)

到目前为止,

How MySQL Uses Indexes回答了有关MySQL索引的所有问题。值得一读。