我有以下查询:
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/