表:
CostMoney iMoney 类型:float
dtEventTime 类型:datetime
iType 类型:tinyint
iAction 类型:tinyint
现在存在的索引(test)是:
iType 跟 dtEventTime 的一个组合索引
`select sum(iMoney) as iMoney,iAction
from CostMoney where iType = 3 and dtEventTime
between '2012-09-29' and '2012-09-30' group by iAction `
这条语句查询后explain 下
` id select_type table type possible_keys key key_len ref
rows Extra 1 SIMPLE CostMoney range test test 9 NULL
3893 Using where; Using temporary; Using filesort `
这个表里面的数据每天特别大 , 请问有什么好的优化办法?
看iAction是tinyint型的数据,可以考虑分成两个表,CostMoney和CostMoney_History,两个表的结构是相同的。(也可以是三个表,可以把CostMoney分拆,比如把今天以前所有的数据插入到另外一个表,CostMoney只保留今天(当月)的数据。)
挑一个在线人数少的时间,如半夜,把昨天的数据先求sum后插入到CostMoney_History表中。
然后在程序中判断查询的数据是否包括今天。
如果包括今天:
如果不包括今天:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。