zoukankan      html  css  js  c++  java
  • 表数据越来越多,查询越来越慢怎么办?

     
    前提是已经考虑了索引的问题,但因为数据量大导致表的增删改查还是很慢
     
     
    解决方案建议
      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. 分表后的数据跨表整合需要中间件支持或自行开发

  • 相关阅读:
    单据体内2个字段比较
    立账模式
    余额
    单据服务校验设置
    值更新事件(触发带基础属性到指定字段)
    重建索引 ,压缩数据库
    数据库自动备份
    BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维
    BZOJ 4399: 魔法少女LJJ 线段树合并 + 对数
    BZOJ 2217: [Poi2011]Lollipop 构造 + 思维
  • 原文地址:https://www.cnblogs.com/gossip/p/14078383.html
Copyright © 2011-2022 走看看