开发者社区> 问答> 正文

有关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 2712 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

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

    2019-07-17 18:41:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像