如何快速优化大数据量订单表

场景

本篇分享以前在广州一家互联网公司工作时遇到的状况及解决方案,这家公司有一个项目是SOA的架构,这个架构那几年是很流行的,哪怕是现在依然认为这个理念在当时比较先进。

当时的项目背景大概是这样,这家公司用的是某软提供的方案,项目已经运行3年多,整体稳定。

数据库是MySQL,订单表的数据量已经达到3000多万条记录,并且随着项目的推广,最近那一年订单表数据量也在快速增长。

结果就是,客户方查询订单相关的业务时速度越来越慢,后期不论打开还是刷新都差不多要七八秒。

可以说已经严重影响了客户体验,降低了对方日常办事的效率,要求我们尽快解决,且敦促我们这是一件优先级非常高的事情。

在客户和公司领导的双重压力下,如何快速优化几千万数据的订单表,对于当时的团队着实是一个难题摆在面前。

整体方案

首先常规方案能想到的无非是这些:增加合理的数据库索引、优化核心SQL语句、优化代码等

这里可以告诉大家,一般的IT公司,但凡团队Leader是个有经验的人,这些基础方案都是会提前做的,会对项目上线后可能遇到的瓶颈有个基本的评估,因为真正运营周期变长以后,数据量逐渐增多,修改生产库是一种风险操作。

不知道大家有没有过给某个生产库数据量比较大的表添加字段或索引的经历,而且是在白天上班操作,或者说你自己见过别人这么干,我只能说……这些都是狠人,要对其常怀敬畏之心。

目前所在的公司就比较规范,研发人员建表时一定要提交申请走流程,且附带合理的索引,一起提交审核,最终通过了才能由主管审核执行。

话题扯回来,正因前面所讲,在当前的问题下,这些基础方案实际上已经存在,在这里显然是用不上了,加上紧急问题紧急处理,没有那么多时间给你去对既有架构大动干戈。

因此,当时立马能想到且有效的临时性方案迅速在团队讨论中率先冒出来,就是数据库分区

1、数据库分区

理解数据库分区,只需要记住以下两点:

  • 数据库分区是把一张表的数据分在了不同的硬盘上,但仍是一张表,说硬盘可能不完全准确,但就这样理解是最容易的。
  • 不要把数据库分区和分库分表混淆,一个是数据库级别的操作,一个是代理工具的操作,前者限制较多,后者更灵活。

知道这两点其实就足够了,数据库分区和分库分表也是面试中喜欢问的,因为确实有一些类似的地方。

好了,有了基本认识,那接下来就说下数据库分区如何操作的,先看个图有个画面。

接着举个示例,我们假设有一张订单表,那么对这张订单表按照年份进行分区的命令如下:

-- 创建订单表
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_number VARCHAR(20),
    order_date DATE,
    customer_id INT,
    total_amount DECIMAL(10, 2)
);

-- 按照年份对订单表进行分区
ALTER TABLE orders
PARTITION BY RANGE(YEAR(order_date)) (
    PARTITION p2018 VALUES LESS THAN (2019),
    PARTITION p2019 VALUES LESS THAN (2020),
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024)
);

这样一来࿰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/260926.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轴具匠心 SIA上海轴承展带您开启轴承之旅

轴承是各类机械装备的重要基础零部件,它的精度、性能、寿命和可靠性对主机的工作效率、使用寿命起着决定性的作用。随着市场的发展,用户对轴承产品的精度、性能、种类等方面的要求越来越高,市场对高档轴承的需求也在不断增加。 由中国设备管理…

Android中EventBus的简单使用

目录 介绍 EventBus产生的背景 EventBus工作流程图解 EventBus的优势 EventBus缺点 EventBus 的一些关键概念和用法: 使用 EventBus 的基本流程: EventBus环境配置 EventBus的五种线程模式 EventBus的使用 EventBus事件三部曲 创建一个事件类…

SE-Net:Squeeze-and-Excitation Networks(CVPR2018)

文章目录 AbstractIntroduction表征的重要性以前的方向本文提出 Related WorkDeeper ArchitectureAlgorithmic Architecture SearchAttention and gating mechanisms Squeeze-and-Excitation BlocksSqueeze: Global Information EmbeddingExcitation: Adaptive RecalibrationIn…

ssm基于vue的厨房管理系统论文

摘 要 使用旧方法对厨房管理信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在厨房管理信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。 这次开发的厨房管理系统管…

【Python-批量修改视频分辨率】

Python-批量修改视频分辨率 1 使用Python修改视频分辨率2 常见的视频编码格式2.1 等效的编码格式表示方式2.2 常见的编码格式 1 使用Python修改视频分辨率 首先拷贝视频文件并修改后缀,然后修改图片的分辨率,实现视频批量修改和转换。 import os impor…

自定义注解实现 后台系统-记录日志功能

文章目录 1 记录日志1.1 记录日志的意义1.2 日志数据表结构1.3 记录日志思想1.4 切面类环境搭建1.4.1 日志模块创建1.4.2 自定义Log注解1.4.3 OperatorType1.4.4 LogAspect1.4.5 EnableLogAspect1.4.6 测试日志切面类 1.5 保存日志数据1.5.1 SysOperLog1.5.2 LogAspect1.5.3 As…

【教程】cocos2dx资源加密混淆方案详解

1,加密,采用blowfish或其他 2,自定是32个字符的混淆code 3,对文件做blowfish加密,入口文件加密前将混淆code按约定格式(自定义的文件头或文件尾部)写入到文件 4,遍历资源目录,对每个文件做md5混淆,混淆原始串“相对路径”“文件名”混淆code, 文件改名并且移动到资源目录根…

C# try-catch异常处理的用法

try-catch 是一种在编程语言中用于捕获和处理异常的结构。它的作用是在可能引发异常的代码块中进行异常处理,以避免程序崩溃或产生不可预料的结果。 当在 try 块中的代码执行时,如果发生了异常,程序会立即跳转到对应的 catch 块。catch…

http客户端Feign

http客户端Feign 文章目录 http客户端Feign定义和使用Feign客户端自定义Feign的配置Feign的性能优化feign的最佳实践 定义和使用Feign客户端 <!-- feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>s…

为什么C语言没有被C++所取代呢?

今日话题&#xff0c;为什么C语言没有被C所取代呢&#xff1f;虽然C是一个功能更强大的语言&#xff0c;但C语言在嵌入式领域仍然广泛使用&#xff0c;因为它更轻量级、更具可移植性&#xff0c;并且更适合在资源受限的环境中工作。这就是为什么C语言没有被C所取代的原因。如果…

玩转 Scrapy 框架 (一):Scrapy 框架介绍及使用入门

目录 一、Scrapy 框架介绍二、Scrapy 入门 一、Scrapy 框架介绍 简介&#xff1a; Scrapy 是一个基于 Python 开发的爬虫框架&#xff0c;可以说它是当前 Python 爬虫生态中最流行的爬虫框架&#xff0c;该框架提供了非常多爬虫的相关组件&#xff0c;架构清晰&#xff0c;可扩…

高速视频采集卡设计方案:620-基于PCIe的高速视频采集卡

一、产品概述 基于PCIe的高速视频采集卡&#xff0c;通过PCIe3.0X8传输到存储计算服务器&#xff0c;实现信号的分析、存储。 北京太速科技 产品固化FPGA逻辑&#xff0c;适配视频连续采集&#xff0c;缓存容量2GB&#xff0c;开源的PCIe QT客户端软件&#xff0c…

常用网络接口自动化测试框架

(一&#xff09;GUI界面测试工具&#xff1a;jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDataSetConfig(添加.csv格式的文件&#xff0c;并在参数值里以${x}格式写入) 此时变量…

第五讲观测值中与卫星、接收机有关的误差 第六讲观测值中与信号传播路径有关的误差以及电离层、对流层相关模型 | GNSS(RTK)课程学习笔记day3

说明&#xff1a;以下笔记来自计算机视觉life吴桐老师课程&#xff1a;从零掌握GNSS、RTK定位[链接]&#xff0c;从零掌握RTKLIB[链接]。非原创&#xff01;且笔记仅供自身与大家学习使用&#xff0c;无利益目的。 第五讲 观测值中与卫星、接收机有关的误差 卫星轨道误差 由卫…

如何有效压缩图片大小?保持质量的同时减小文件大小

图片体积过大&#xff0c;不仅仅会导致我们电脑或者手机内存不足&#xff0c;在一些网络平台上传的时候&#xff0c;也会因为限制上传失败&#xff0c;为了有效减少文件所占用的存储空间和上传&#xff0c;我们可以先利用图片压缩功能去把图片缩小kb&#xff0c;那么具体是怎么…

Python Pandas 多重索引DataFrame数据(第19讲)

Python Pandas 多重索引DataFrame数据(第19讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

【powershell】Windows环境powershell 运维之历史文件压缩清理

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

Find My资讯|苹果Find My大升级:可添加物品数量翻倍,从16个飙升至32个!

苹果Find My是Find My iPhone&#xff08;查找我的iPhone&#xff09;和Find My Friends&#xff08;查找朋友&#xff09;的结合体&#xff0c;新系统中苹果为了追求简洁&#xff0c;于是把这两个应用整合到一块了。Find My作用于iOS13、iPadOS&#xff08;苹果为iPad定制的新…

笨爸爸工房携手洛阳科学技术馆,开启全新手工课程!

笨爸爸工房与洛阳科学技术馆达成合作&#xff0c;每周六上午9点50分在洛阳科学技术馆开设全新的手工课程。通过丰富多彩的手工课程&#xff0c;让孩子在动手实践中感受传统木艺的乐趣&#xff0c;了解中国传统文化的内涵。笨爸爸工房以木工为媒介&#xff0c;希望通过提升父亲参…

LeetCode 739每日温度 496 下一个更大元素 | 代码随想录25期训练营day58

单调栈1 LeetCode 739 每日温度 2023.12.21 题目链接代码随想录讲解[链接] vector<int> dailyTemperatures(vector<int>& temperatures) {//暴力求解&#xff0c;但会超时/*vector<int> answer(temperatures.size(), 0);for (int i 0; i < tempe…