我有一张超过10,00,000行并且正在增长的巨大桌子。数据看起来像这样
id topic_id publish_date hits
-------------------------------------------------
1 1 2014-01-01 20
2 1 2014-01-01 10
3 1 2014-01-03 10
4 2 2014-01-10 50
5 2 2014-01-15 100
...
...
我有另一个主题包含id,name,start_date,end_date的表。
我需要从每个主题的表日常命中检索命中数据。这将使我能够比较他们每天的表现
例如:
Topic -> 1 2
day
1 x y
2 y a
3 z b
等等。
我希望我做出正确的解释。
我想做的是:
SELECT report.topic_id, topic.start_date,
SUM(IF( DATEDIFF(report.hits , en.start_date) = 0, hit,0)) as d0
,SUM(IF( DATEDIFF(report.hits , en.start_date) = 1, hit,0)) as d1
,SUM(IF( DATEDIFF(report.hits , en.start_date) = 2, hit,0)) as d2
,SUM(IF( DATEDIFF(report.hits , en.start_date) = 3, hit,0)) as d3
,SUM(IF( DATEDIFF(report.hits , en.start_date) = 4, hit,0)) as d4
,SUM(IF( DATEDIFF(report.hits , en.start_date) = 5, hit,0)) as d5
from report left join topic en on report.topic_id = en.id
where topic_id in (1,2,4)
group by topic_id
生成结果数据需要10-12秒。我正在使用PHP& MySQL的。我愿意通过脚本计算,缓存结果来进行权衡取消db。
有更好的方法吗?我正在寻找更快的方法来检索结果。