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


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

  • 相关阅读:
    JAVA调用WebService总结
    关于购物车的想法
    ASP.NET中初试Ajax
    转帖:从FxCop归纳出来的一些规范建议
    数据结构(二叉树)C#描述
    FormView控件和DetailsGridView控件实现MasterSlave
    在.NET中使用MySql数据库
    Oracle学习总结1
    Oracle学习总结2
    关于字符匹配所引起的的问题
  • 原文地址:https://www.cnblogs.com/gossip/p/14078383.html
Copyright © 2020-2023  润新知