项目问题总结三、分表跨月查询速度优化
2017-03-11 10:00
246 查看
接上文, 短彩信群发平台的一个特点是数据量大。按日均发送量50W条每天,每月数据在1500W左右。 所以历史库采用分表策略, 每月一张表。另外为提高历史表入库速度,建有当天表一张,每天晚上将当天表数据拷贝到当月历史表,并清空当天表。 历史表与用户表、任务表、业务表等多表关联。 用户要求跨月查询,且速度要求快,经协商可查询两个月内数据。
以上为背景, 根据分表规则,最多是查询三张表。例如查询8月1日到当天的记录,需要查询表t_xxx_history_201208,t_xxx_history_201209和当天表t_xxx_history。普通方法通过union直接查询,每张表数据100W左右就需要1分钟左右。
笔者采用了另外一种方式来处理,
1、将查询条件分解, 并分别到关联表去查询以得到相应的id列表。
2、根据各关联表id列表和其余查询条件分别count查询t_xxx_history_201208、t_xxx_history_201209、t_xxx_history。然后相加得到总记录数。这样可以计算出总页数,及当前页的记录分布在哪几张表里面。然后依次 从表中获取数据组装成list返回前台显示。 目前每张表数据在1500W左右,查询显示速度在5秒以内完成。
以上为背景, 根据分表规则,最多是查询三张表。例如查询8月1日到当天的记录,需要查询表t_xxx_history_201208,t_xxx_history_201209和当天表t_xxx_history。普通方法通过union直接查询,每张表数据100W左右就需要1分钟左右。
笔者采用了另外一种方式来处理,
1、将查询条件分解, 并分别到关联表去查询以得到相应的id列表。
2、根据各关联表id列表和其余查询条件分别count查询t_xxx_history_201208、t_xxx_history_201209、t_xxx_history。然后相加得到总记录数。这样可以计算出总页数,及当前页的记录分布在哪几张表里面。然后依次 从表中获取数据组装成list返回前台显示。 目前每张表数据在1500W左右,查询显示速度在5秒以内完成。
相关文章推荐
- 最近一年做Android项目过程中,对其的一些注意事项(优化)以及问题总结(二)
- 项目中Angularjs遇到的问题和优化总结
- iOS开发——项目实战总结&UITableView性能优化与卡顿问题
- 项目中Angularjs遇到的问题和优化总结
- 项目总结笔记系列 MySQL分页查询优化
- 项目中Angularjs遇到的问题和优化总结
- JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结
- 总结一次项目中切换速度的优化
- 最近一年做Android项目过程中,对其的一些注意事项(优化)以及问题总结(一)
- 数据库查询优化方案(处理上百万级记录如何提高处理查询速度)总结不好之处请指点----
- SQLite对字符串字段建立索引后查询速度无优化的问题
- 关于查询优化问题总结
- php代码优化及php相关问题总结
- Sql语句查询优化总结:
- 数据库查询速度优化 2 优化SQL语句方法
- 提高查询速度方法总结
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助
- 提高查询速度方法总结
- 提高查询速度方法总结(转)
- 提高查询速度方法总结