开发者社区 问答 正文

有关mysql group by优化的问题

表:
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 `

这个表里面的数据每天特别大 , 请问有什么好的优化办法?

展开
收起
落地花开啦 2016-02-12 11:03:25 2868 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    看iAction是tinyint型的数据,可以考虑分成两个表,CostMoney和CostMoney_History,两个表的结构是相同的。(也可以是三个表,可以把CostMoney分拆,比如把今天以前所有的数据插入到另外一个表,CostMoney只保留今天(当月)的数据。)
    挑一个在线人数少的时间,如半夜,把昨天的数据先求sum后插入到CostMoney_History表中。
    然后在程序中判断查询的数据是否包括今天。
    如果包括今天:
    4
    如果不包括今天:
    5

    2019-07-17 18:41:11
    赞同 展开评论