为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2023-04-16 17:13:05
表结构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
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

给你点建议:
1、按天分表,这样每个表就不会那么大
2、用另一个缓存、或者表专门累加iMoney,每天的分记录,产生一条累加一次
3、group by iAction order by NULL ?(天知道有没有效果)

查看完整回答
反对 回复 2023-04-19
?
aluckdog

TA贡献1847条经验 获得超7个赞

首先,dtEventTime必须要有索引的。而且dtEventTime类型应该是int,不应该使用date的。否则索引效率太低。
其次,分析这个sql的频率高么?
如果只是几次之类的话,而且数据要求不是实时的话,可以考虑循环取数据,程序里面做group和sum的功能。
如果很频繁,数据要求实时,只能考虑单独对每一个iAction建立单独的计数器。
最后,sql应该尽量简单,最理想的情况每次取数据都走索引。数据库更多的是存数据,尽量减少每次sql的cup和io资源。数据库的资源很宝贵,扩展成本比较高。

查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信