我使用mysql + php开发了一个计费摘要页面。
- 有很多用户:(1M)
- 轻度用户:每条记录少于 10K:99 万用户
- 重度用户:每条记录约1M条
SQL 如下:
SELECT SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM daily_data_sep_2010
WHERE user_id='<user_id>'
AND type
IN (
'type_a', 'typeb'
)
AND publish_date
BETWEEN '<start_date>'
AND '<end_date>'
GROUP BY publish_date
ORDER BY publish_date DESC
daily_data_sep_2010 表类型为 MyISAM
相同的查询有多种类型,但是 SUM(value_a) A、SUM(value_b) B、SUM(value_c) C 确实相同(相等) “WHERE”、“GROUP BY”条件不相同
这个屏幕对于重度用户来说非常慢。 大家有什么好的解决办法吗?
解释在这里
|表|类型|possible_keys |key |key_len |ref |行|额外|
|daily_data_sep_2010|全部|主要,user_id_key,类型,发布日期|||| 1059756 |使用地点;使用临时的;使用文件排序|
我认为行大小对于总和来说太大了。 所以我期待其他解决方案(Hadoop?)
最佳答案
如果您在(用户 ID,类型)上创建复合索引并执行以下操作,会有什么不同:
where userid = ? and type in (a,b)
and publish_date between...
group by publish_date
关于php - 某些账单详细信息页面的重度用户会出现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973541/