当前位置: 首页 > news >正文

单表数据量过大查询速度慢解决方案

方案1:分库分表,读写分离 (不推荐)

对于这样的问题,平时我吗第一反应是分库分表,但是往往忽略了,分库分表带来的黑坑!

1. 跨库/跨表查询带来的问题,你可能要改业务代码,分库/分表查询后数据聚合问题

2.数据再次上去后,水平扩展与分片策略算法冲突导致数据正确落库问题

3. 需要中间件ProxySql完成从库的访问流量分发,调用链路变长,还要保证高可用,运维成本高

4. 现有Mycat /ShardingSphere不支持历史数据的自动分片,需要手动完成旧数据的处理

方案2:使用分布式数据 (推荐)

分布式数据库能解决分库分表最诟病的数据分片问题,能当成单个Mysql服务那样连接使用,我们不管数据任何分布存储,国产的分布式数据如TiDB、OceanBase、openGauss;但是分布式数据库部署成本相对要高不少,因为它们需要一些组件服务支持它调度从长远来看是性价比较高的。

方案3:冷热数据分离 (推荐)

冷热数据分离,一般只做到分表就行,可行性高,成本也是最低的方案;就是需要少量改动查询的代码,如果业务能接受不可查历史久远的数据,代码都不用动。就是冷热数据的分类需要根据自己业务自行判断,一般过了一年的数据认为是冷数据。

下面是Mysql冷热数据分离的具体操作流程:

核心思路:用 MySQL 视图(View)屏蔽冷热差异,程序只查一个“逻辑表”,冷热数据自动合并,完全无。

第1步:归档冷数据到 orders_archive 表

-- 1. 建归档表(结构同主表) CREATE TABLE orders_archive LIKE orders; -- 2. 迁移冷数据(按你的规则,比如1年前且状态完结) INSERT INTO orders_archive SELECT * FROM orders WHERE create_time < '2025-04-01' AND status IN ('completed', 'closed'); -- 3. 删除主表中的冷数据 DELETE FROM orders WHERE create_time < '2025-04-01' AND status IN ('completed', 'closed');

第2步:创建统一查询视图

-- 创建视图,合并热表 + 冷表 CREATE VIEW orders_all AS SELECT * FROM orders -- 热数据(主表) UNION ALL SELECT * FROM orders_archive; -- 冷数据(归档表)

第3步:把原表名指向视图(关键!)

-- 重命名原表(备份) RENAME TABLE orders TO orders_hot; -- 把视图命名为原表名 RENAME TABLE orders_all TO orders;

现在你的程序还是 SELECT * FROM orders WHERE ...,完全不用改!

写入操作如何兼容?

因为视图不支持写入,所以写操作需要修改sql

// 修改前(所有操作都用 orders) "INSERT INTO orders ..."; "UPDATE orders SET ..."; // 修改后(写操作用 orders_hot,读操作仍用 orders) "INSERT INTO orders_hot ..."; // 只改这一行! "UPDATE orders_hot SET ..."; // 只改这一行! "SELECT * FROM orders ..."; // 不用改!
http://www.cnnetsun.cn/news/1712956.html

相关文章:

  • Python + pytest 模块导入问题的标准解决方案
  • 华硕rog 硬件顶流
  • C++ lambda 捕获机制与作用域
  • 独立按键切换LED多种亮灭模式
  • Bus 001 Device 014: ID 1a86:7523 QinHeng Electronics CH340 serial converter ubuntu 没有/dev/ttyUSB0
  • JavaScript 解构赋值
  • SpringCloud快速入门--GateWay路由网关与Config配置中心
  • 别再只盯着Transformer了!手把手教你用DA-TransUNet的‘双注意力’模块提升医学影像分割精度
  • OpenClaw技能组合拳:Qwen3.5-9B实现多步骤跨境电商运营
  • ‌智慧校园平台选型怎么选?这份避坑指南请收好‌
  • 千问3.5-9B模型微调指南:优化OpenClaw任务准确率
  • 模型微调加持:OpenClaw专用Qwen3.5-9B优化实践
  • C语言开端
  • Adafruit EPD库深度解析:ePaper墨水屏驱动原理与工程实践
  • RS485接口EMC设计要点与工程实践
  • 基于MATLAB与COMSOL联合仿真的局部放电模拟系统功能说明
  • MultiTapButton:嵌入式多击按键状态机库详解
  • SparkFun MPU-9250 DMP库深度解析:9轴姿态解算与嵌入式集成实战
  • RTOS学习指南:从理论到实践的完整路径
  • BLDC无刷电机脉冲注入启动法及其保护功能与控制原理
  • Lansium-Arduino:面向物联网终端的轻量级MQTT通信库
  • OpenClaw模型微调:gemma-3-12b-it针对自动化任务的专项优化
  • OpenClaw+千问3.5-9B数据清洗:Excel表格异常值检测与修复
  • 别只当画图工具!用QGIS插件和工具箱,5分钟完成道路数据清洗与检查
  • OpenClaw邮件处理:Qwen3.5-9B自动分类收件箱与生成摘要回复
  • LWLP5000差压传感器驱动库详解:高精度MEMS温补与嵌入式I²C集成
  • slippy嵌入式SLIP协议库:轻量、确定性、零依赖的帧封装实现
  • 告别纸上谈兵:用STM32和FreeRTOS动手复现NCRE嵌入式考试里的经典案例
  • 电感器核心参数解析与工程应用指南
  • UG NX 移动对象