php - Mysql查询提高性能

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

Explain 给出以下输出:

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 上有一个索引,但性能很慢。什么是完美的解决方案? 谢谢

最佳答案

除了 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

关于php - Mysql查询提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688024/

相关文章:

在 R 中的 For 循环中引用数组中的元素 - 初学者

c - 尝试在 C 中引用值时出现 LValue 错误

php - MySQL 多重条件

php - pg_fetch_all() 将整数打印为字符串

mysql - Magento MySQL 调整

php - 找出记录的可用日期中最大的日期,然后将输出映射到其他类似的输出以找到所有日期中的最大日期

python - 使用 Numpy Python 限制矩阵每行中的元素数量

php - 一次查询获取3张表的数据

php - 想在php后台发送邮件

mysql - 比较两个可能重复的 MySQL 列