表数据越来越多,查询越来越慢怎么办?

 
前提是已经考虑了索引的问题,但因为数据量大导致表的增删改查还是很慢
 
 
解决方案建议
  1. 历史数据归档
  2. 数据分表
 
 
一. 历史数据归档
 
1.1 方案
  1. 根据时间范围查找需要删除的数据
  2. 如果主键是有序的,可以根据时间范围查找到临界主键进行删除
  3. 创建临时表,迁移数据(已归档数据不迁移),再修改临时表为原表(需要停机)
-- 新建一个临时订单表
create table orders_temp like orders;
 
-- 把当前订单复制到临时订单表中
insert into orders_temp
  select * from orders
  where timestamp >= SUBDATE(CURDATE(),INTERVAL 1 month);
 
-- 修改替换表名
rename table orders to orders_old
rename table orders_temp to orders
 
-- 删除旧表
drop table orders_temp

  

1.2 优点
  1. 对系统改动小,改造成本低
  2. 可根据数据量制定归档周期
 
1.3 缺点
  1. 历史归档数据属于冷数据,需要单独查询
  2. 需要开发自动归档程序,并比对归档前后数据正确性
 
1.4 扩展
  1. 删除归档数据时,应分批删除,减少对数据库的压力
  2. 数据删除仅做标记,不做实际删除,会导致磁盘碎片。但扫描数据时,只会扫描未删除的数据,减少扫描数据量,提高速度。
 
二. 数据分表
 
2.1 优点
1. 预估好数据量,计划好分表数的前提下,可支撑大量数据
2. 使用适合的中间件对业务无侵入
 
2.2 缺点
1. 存在冷热数据不均的情况,热表还是会有大数据问题
2. 需要研究中间件或自行开发,否则对业务侵入较大
3. 历史数据按时间分表无需迁移数据,按其它分片键分表需迁移数据
 
2.3 扩展
1. 分表后的数据跨表整合需要中间件支持或自行开发

posted @ 2020-12-03 11:03    阅读(1696)  评论(0编辑  收藏  举报