数据库mysql 只能使用innodb引擎 有一张交易记录表,分表逻辑是按年月分 table_202308,table_202309..... 现在要对交易记录进行统计,而且后台也要查看记录 数据查询语句怎么优化?
我能想到的是 写个for循环一次一次查......
写个for循环生成union all SQL,只请求一次数据库。
数据量很大 不能这样些sql
同问
一般这种场景都是使用etl将数据导入OLAP系统中进行统计的; 自己如果做的话,就弄一个批处理定时任务,分维度分颗粒度来进行统计,然后落一张表,业务的统计可以再在这张表上进行二次统计
我试试
为啥不能使用Merge引擎?
云数据库只能使用innoDB引擎
看数据大小, 可以重新弄一个数据库, 建立分区表, 把所有数据导入,根据数据要求来统计. 如果数据实在太多, 使用阿里的rds来统计, 虽然要花钱, 效果很好.
不能按日期存啊,得按用户存···
如果对实效性没有要求的比如不查今天数据,可以在人少时用定时任务进行业务统计然后落在一张表上,查询都用这个表
新建统计表,去写mysql触发器 同步数据到统计表
使用trigger的话, 可以使用canal代替, 这个更简单点
先试试MySQL的分区吧,对业务是透明的,改动非常小 分表的话,业务层太麻烦了
交易数据不变的情况下,可以把这些数据交给时序数据库,空间占用小,统计计算也很快。
写个for循环生成union all SQL,只请求一次数据库。
数据量很大 不能这样些sql
同问
一般这种场景都是使用etl将数据导入OLAP系统中进行统计的;
自己如果做的话,就弄一个批处理定时任务,分维度分颗粒度来进行统计,然后落一张表,业务的统计可以再在这张表上进行二次统计
我试试
为啥不能使用Merge引擎?
云数据库只能使用innoDB引擎
看数据大小, 可以重新弄一个数据库, 建立分区表, 把所有数据导入,根据数据要求来统计. 如果数据实在太多, 使用阿里的rds来统计, 虽然要花钱, 效果很好.
不能按日期存啊,得按用户存···
如果对实效性没有要求的比如不查今天数据,可以在人少时用定时任务进行业务统计然后落在一张表上,查询都用这个表
新建统计表,去写mysql触发器 同步数据到统计表
使用trigger的话, 可以使用canal代替, 这个更简单点
先试试MySQL的分区吧,对业务是透明的,改动非常小
分表的话,业务层太麻烦了
交易数据不变的情况下,可以把这些数据交给时序数据库,空间占用小,统计计算也很快。