MySQL分库分表及中间件Mycat

article/2025/8/22 0:04:17

文章目录

  • 一、前言
    • 1.1 垂直切分
    • 1.2 垂直切分的优缺点:
    • 1.3 水平切分
      • 1.3.1 水平分表
      • 1.3.2 水平分库
    • 1.4 水平切分优缺点
  • 二、Mycat 中间件实现读写分离
    • 2.1 mycat
    • 2.2 mycat安装
    • 2.3 利用mycat实现mysql的读写分离
  • 三、Mysql高可用

一、前言

刚开始我们的系统只用了单机数据库
随着用户的不断增多,考虑到系统的高可用和越来越多的用户请求,我们开始使用数据库主从架构
当用户量级和业务进一步提升后,写请求越来越多,这时我们开始使用了分库分表

如何解决? 数据切分

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机) 上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。
一种是按照不同的表(或者 Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据 表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小, 业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。 根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中, 对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

1.1 垂直切分

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面

需要各个表直接尽可能都合度降低,最好不要有依赖关系,因为跨表查询不方便。但通常关系型数据库很难做到耦合度降低,特别是存在复杂的join关系
在这里插入图片描述

1.2 垂直切分的优缺点:


优点:拆分后业务清晰,拆分规则明确系统之间整合或扩展容易数据维护简单
缺点:部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高事务处理复杂

由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。

1.3 水平切分

水平切分分为水平分库和水平分表

1.3.1 水平分表

按照id范围、用户来源、用户级别等规则。
针对数据量巨大的单张表(比如订单表),按照规则把一张表的数据切分到多张表里面去。
但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。
在这里插入图片描述

1.3.2 水平分库

将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合
不同。 水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件
资源等的瓶颈
简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分 到一个数据库,而另外的某些行又切分到其他的数据库中
在这里插入图片描述
拆分数据就需要定义分片规则。
几种典型的分片规则包括:

  • 按照用户 ID 求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中
  • 按照日期,将不同月甚至日的数据分散到不同的库中
  • 按照某个特定的字段求模,或者根据特定范围段分散到不同的库中

切分原则都是根据业务找到适合的切分规则分散到不同的库,下面用用户 ID 求模举例:
在这里插入图片描述

1.4 水平切分优缺点

优点:拆分规则抽象良好,join 操作基本都可以数据库完成不存在单库大数据,高并发的性能瓶颈应用端改造较少提高了系统的稳定性跟负载能力
缺点:拆分规则难以抽象分片事务一致性难以解决数据多次扩展难度跟维护量极大跨库 join 性能较差

二、MySQL 中间件
在这里插入图片描述

  • mysql-proxy:Oracle,https://downloads.mysql.com/archives/proxy/
  • Atlas:Qihoo,https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
  • dbproxy:美团,https://github.com/Meituan-Dianping/DBProxy
  • Cetus:网易乐得,https://github.com/Lede-Inc/cetus
  • Amoeba:https://sourceforge.net/projects/amoeba/
  • Cobar:阿里巴巴,Amoeba的升级版, https://github.com/alibaba/cobar
  • Mycat:基于Cobar http://www.mycat.io/ (原网站)
    http://www.mycat.org.cn/
    https://github.com/MyCATApache/Mycat-Server
  • ProxySQL:https://proxysql.com/

二、Mycat 中间件实现读写分离

2.1 mycat

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

为什么要用MyCat
这里要先搞清楚Mycat和MySQL的区别(Mycat的核心作用)。我们可以把上层看作是对下层的抽象,例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?假如只有一种硬件的时候,我们需要开发一个操作系统吗?再比如一个项目只需要一个人完成的时候不需要leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对于他的上层来说就是对项目组的抽象

同样的,当我们的应用只需要一台数据库服务器的时候我们并不需要Mycat,而如果你需要分库甚至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是Mycat的核心作用。所以可以这样理解:数据库是对底层存储文件的抽象,而Mycat是对数据库的抽象

mycat工作原理
Mycat的原理中最重要的一个动词是"拦截",它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户

Mycat适用场景

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
  • 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
  • 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化报表系统,借助于Mycat的分表能力,处理大规模报表的统计
  • 替代Hbase,分析大数据
  • 作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择

MyCat的高可用性:
需要注意: 在生产环境中, Mycat节点最好使用双节点, 即双机热备环境, 防止Mycat这一层出现单点故障.
可以使用的高可用集群方式有:

  • Keepalived+Mycat+Mysql
  • Keepalived+LVS+Mycat+Mysql
  • Keepalived+Haproxy+Mycat+Mysql

2.2 mycat安装

1.mycat基于java ,下载安装JDK

yum install java -y

2.下载mycat 下载的是编译好的,可以直接解压使用

wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

3.解压

mkdir /apps 
tar xzf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/

4.mycat目录说明

mycat安装目录结构:
bin mycat命令,启动、重启、停止等
catlet catlet为Mycat的一个扩展功能
conf Mycat 配置信息,重点关注
lib Mycat引用的jar包,Mycat是java开发的
logs 日志文件,包括Mycat启动的日志和运行的日志
version.txt mycat版本说明

logs目录:

  • wrapper.log mycat启动日志
  • mycat.log mycat详细工作日志

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

  • server.xml Mycat软件本身相关的配置文件,设置账号、参数等
  • schema.xml Mycat对应的物理数据库和数据库表的配置,读写分离、高可用、分布式策略定制、节点控制
  • rule.xml Mycat分片(分库分表)规则配置文件,记录分片规则列表、使用方法等启动和连接

5.启动和连接

#配置环境变量
vim /etc/profile.d/mycat.sh
PATH=/apps/mycat/bin:$PATH#启动
source /etc/profile.d/mycat.sh
mycat start
#查看日志,确定成功
[root@localhost ~]# cat /apps/mycat/logs/wrapper.log 
STATUS | wrapper  | 2021/11/20 23:47:34 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2021/11/20 23:47:34 | Launching a JVM...
INFO   | jvm 1    | 2021/11/20 23:47:35 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2021/11/20 23:47:35 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2021/11/20 23:47:35 | 
INFO   | jvm 1    | 2021/11/20 23:47:36 | MyCAT Server startup successfully. see logs in logs/mycat.log#连接mycat:
mysql -uroot -p123456 -h 127.0.0.1 -P8066

2.3 利用mycat实现mysql的读写分离

服务器ip角色
client10.0.0.63客户端
mycat中间件10.0.0.212代理
master10.0.0.201主节点
slave10.0.0.211从节点

在这里插入图片描述
1.创建mysql主从数据库
2.中间节点安装mycat
3.修改mycat端口,默认为8806

vim /apps/mycat/conf/server.xmlycat

如下为客户连接mycat的用户名和密码,系统默认已经创建

<user name="root" defaultAccount="true">  # 连接mycat的用户名<property name="password">123456</property> # 连接mycat的密码<property name="schemas">TESTDB</property><property name="defaultSchema">TESTDB</property>

逻辑数据库为TESTDB,这些信息都可以自己随意定义,读写权限都有,没有针对表做任何特殊的权限。重点关注上面这段配置,其他默认即可。

4.在后端主服务器上创建用户(可以自动同步到从上),用于mycat可以连接它

mysql> create user 'root'@'10.0.0.%' IDENTIFIED BY '123456' ;
mysql> grant all on *.* to 'root'@'10.0.0.%';

5.修改schema.xml文件,实现读写分离策略

[root@localhost ~]# cat /apps/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="hellodb" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat> <!--心跳检测--><writeHost host="host1" url="10.0.0.201:3306" user="root" password="123456"><readHost host="host2" url="10.0.0.211:3306" user="root" password="123456" /></writeHost></dataHost>
</mycat:schema>

上面配置中,balance改为1,表示读写分离。以上配置达到的效果就是10.0.0.201为主库,10.0.0.211为从库
注意:要保证能使用root/123456权限成功登录10.0.0.201和10.0.0.211机器上面的mysql数据库。同时,也一定要授权mycat机器能使用root/123456权限成功登录这两台机器的mysql数据库!!这很重要,否则会导致登录mycat后,对库和表操作失败!

6.在客户端测试连接mycat服务器

[root@zabbix-db ~]# mysql -uroot -p123456 -h10.0.0.212
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| toc               |
+-------------------+

7.通过通用日志确认实现读写分离
在mysql中查看通用日志方式

show variables like 'general_log';  #查看日志是否开启
set global general_log=on;    #开启日志功能
show variables like 'general_log_file'; #查看日志文件保存位置
set global general_log_file='tmp/general.log'; #设置日志文件保存位置

在主和从服务器分别启用通用日志,查看读写分离

mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           2 |
+-------------+
在客户端查询,按理说应该在从节点上记录日志
mysql> select * from teachers;在从节点查看日志
2021-11-20T09:12:42.797953Z	   17 Query	select * from teachers
2021-11-20T09:12:49.969072Z	   18 Query	select user()在客户端插入数据,按理说应该只在主节点记录日志
mysql> insert into teachers (name,age) values ('MM',18);在主节点查看日志
2021-11-20T09:15:35.501675Z	   29 Query	SET names utf8;
2021-11-20T09:15:35.503203Z	   29 Query	insert into teachers (name,age) values ('MM',18)
2021-11-20T09:15:39.954650Z	   17 Query	select user()

停止从节点,mycat自动调度读请求至主节点,但是停止主节点,mycat不会自动调度写请求至从节点

三、Mysql高可用

MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经支持一主一从
在这里插入图片描述

  1. MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)
  2. 识别含有最新更新的slave(数据同步最多的slave)
  3. 应用差异的中继日志(relay log)到其他的slave
  4. 应用从master保存的二进制日志事件(binlog events)到所有slave节点
  5. 提升一个slave为新的master
  6. 使其他的slave连接新的master进行复制
  7. 故障服务器自动被剔除集群(masterha_conf_host),将配置信息去掉
  8. MHA是一次性的高可用性解决方案,Manager会自动退出

选举新的Master

  • 如果设定权重(candidate_master=1),按照权重强制指定新主,但是默认情况下如果一个slave落后master 二进制日志超过100M的relay logs,即使有权重,也会失效.如果设置check_repl_delay=0,即使落后很多日志,也强制选择其为新主
  • 如果从库数据之间有差异,最接近于Master的slave成为新主
  • 如果所有从库数据都一致,按照配置文件顺序最前面的当新主

数据恢复
当主服务器的SSH还能连接,从库对比主库position 或者GTID号,将二进制日志保存至各个从节点并且应用(执行save_binary_logs 实现)当主服务器的SSH不能连接, 对比从库之间的relaylog的差异(执行apply_diff_relay_logs[实现])
注意:
为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制

MHA软件由两部分组成,Manager工具包和Node工具包
Manager工具包主要包括以下几个工具:

masterha_check_ssh       检查MHA的SSH配置状况
masterha_check_repl     检查MySQL复制状况
masterha_manger         启动MHA
masterha_check_status   检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 故障转移(自动或手动)
masterha_conf_host     添加或删除配置的server信息
masterha_stop  --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用

在这里插入图片描述

安装步骤,在MHA管理端安装manager和node
在其他节点安装node


http://chatgpt.dhexx.cn/article/L2MgJ8Ig.shtml

相关文章

Mysql - 分库分表

介绍 问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&#xff0c;产生大量磁盘IO&#x…

MySQL分库分表原理

前言 ❤Java学习路线个人总结-博客 ❤欢迎点赞&#x1f44d;收藏⭐留言 &#x1f4dd;分享给需要的小伙伴 文章目录 前言1、为什么要分库分表02、分库分表03、不停机分库分表数据迁移4、分库分表实现5、读写分离实现 1、为什么要分库分表 分库分表目的&#xff1a;解决高并发&a…

mysql分库分表(二)

微信搜索&#xff1a;“二十同学” 公众号&#xff0c;欢迎关注一条不一样的成长之路 一种可以避免数据迁移的分库分表scale-out扩容模式 一种可以避免数据迁移的分库分表scale-out扩容方式 目前绝大多数应用采取的两种分库分表规则 mod方式dayofweek系列日期方式&#xff…

Mysql分库分表方案

相关文章&#xff1a; 1、 使用Spring AOP实现MySQL数据库读写分离案例分析 2、MySQL5.6 数据库主从&#xff08;Master/Slave&#xff09;同步安装与配置详解 3、MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总结 4、使用mysqlreplicate命令快速搭建 Mysql 主…

mysql-分库分表

1、为什么要分库分表 1、为什么要分库分表 出现数据库瓶颈&#xff0c;比如IO瓶颈&#xff0c;CPU瓶颈 1、IO瓶颈 &#xff08;1&#xff09;磁盘读IO瓶颈- 数据体积比较大&#xff1a;大量的写操作&#xff0c;磁盘IO读写必然慢&#xff0c;效率低大量的读操作&#xff0c;…

mysql分库分表(一)

微信搜索&#xff1a;“二十同学” 公众号&#xff0c;欢迎关注一条不一样的成长之路 数据库分库分表策略的具体实现方案 相关文章&#xff1a; 1、 使用Spring AOP实现MySQL数据库读写分离案例分析 2、MySQL5.6 数据库主从&#xff08;Master/Slave&#xff09;同步安装与…

【MySQL】MySQL分库分表详解

目录 一、前言 1.1 数据量 1.2 磁盘 1.3 数据库连接 二、垂直拆分 or 水平拆分&#xff1f; 三、垂直拆分 3.1 垂直分库 3.2 垂直分表 3.3 垂直拆分的优缺点 四、水平拆分 4.1 水平分表 4.2 水平分库分表 4.3 水平拆分的优缺点 五、几种常用的分库分表的策略 5.1 根据数值范围 …

MySQL 分库分表

MySQL分库分表 概念 读写分离优化了互联网读多写少场景下的性能问题&#xff0c;考虑一个业务场景&#xff0c;如果读库的数据规模非常大&#xff0c;除了增加多个从库之外&#xff0c;还有其他的手段吗&#xff1f;实现数据库高可用&#xff0c;还有另外一个撒手锏&#xff…

MySQL之分库分表

为什么要分库分表 用户请求量太大 单服务器TPS、内存、IO都是有上限的&#xff0c;需要将请求打散分布到多个服务器 单库数据量太大 单库处理能力有限&#xff1b;单库所在服务器的磁盘空间有限&#xff1b;单库的操作IO有瓶颈 单表数据量太大 查询、插入、更新操作都会变慢&am…

【Mysql】分库分表

【Mysql】分库分表 文章目录 【Mysql】分库分表1. 介绍2. 拆分策略2.1 垂直拆分2.1.1 垂直分库2.1.2 垂直分表 2.2 水平拆分2.2.1 水平分库2.2.2 水平分表 1. 介绍 采用单数据库进行数据存储存在以下瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不…

一文搞懂MySQL数据库分库分表

如果数据量过大&#xff0c;大家一般会分库分表。分库需要注意的内容比较少&#xff0c;但分表需要注意的内容就多了。 工作这几年没遇过数据量特别大的业务&#xff0c;那些过亿的数据&#xff0c;因为索引设置合理&#xff0c;单表性能没有影响&#xff0c;所以实战中一直没…

Mysql·分库分表

Mysql分库分表 在mysql中新建数据库用以表分库分表mycat解压后配置文件参数server.xml 主要配置mycat服务的参数&#xff0c;比如端口号&#xff0c;myact用户名和密码使用的逻辑数据库等rule.xml 主要配置路由策略&#xff0c;主要有分片的片键&#xff0c;拆分的策略&#xf…

MySQL分库分表,何时分?怎么分?

&#x1f468;‍&#x1f393; 博主介绍&#xff1a; IT邦德&#xff0c;江湖人称jeames007&#xff0c;10年DBA工作经验 中国DBA联盟(ACDU)成员&#xff0c;目前从事DBA及程序编程 &#xff08;Web\java\Python&#xff09;工作&#xff0c;主要服务于生产制造 现拥有 Oracle …

MySQL 分库分表实践

文章目录 一、为什么要分库分表二、库表太大产生的问题三、垂直拆分1. 垂直分库2. 垂直分表 四、水平分表1. 配置水平分表2. 测试水平分表 一、为什么要分库分表 数据库架构演变 刚开始多数项目用单机数据库就够了&#xff0c;随着服务器流量越来越大&#xff0c;面对的请求也…

MySQL如何分库分表

1. 我们为什么需要分库分表 在分库分表之前&#xff0c;就需要考虑为什么需要拆分。我们做一件事&#xff0c;肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它&#xff0c;为什么要分库&#xff1f;为什么要分表&#xff1f; 1.1 为什么要…

MYSQL 之 分库分表

分库分表 关系型数据库本身⽐较容易成为系统瓶颈&#xff0c;单机存储容量、连接数、处理能⼒都有限。当单表的数据量 达到2000W或100G以后&#xff0c;由于查询维度较多&#xff0c;即使添加从库、优化索引&#xff0c;做很多操作时性能仍下降严 重。此时就要考虑对其进⾏切分…

MySQL-分库分表详解(一)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

如何实现MYSQL分库分表

我们学习了在高并发下数据库的一种优化方案&#xff1a;读写分离&#xff0c;它就是依靠主从复制的技术使得数据库实现了数据复制为多份&#xff0c;增强了抵抗大量并发读请求的能力&#xff0c;提升了数据库的查询性能的同时&#xff0c;也提升了数据的安全性。当某一个数据库…

MySQL 分库分表,写得太好了!

https://www.toutiao.com/a6603492496779510276/?tt_frommobile_qq&utm_campaignclient_share&timestamp1549497188&appnews_article&utm_sourcemobile_qq&iid59568063679&utm_mediumtoutiao_android&group_id6603492496779510276 Mysql分库分表…

MySQL数据库怎么进行分库分表?

▲ 点击上方“分布式实验室”关注公众号 回复“1”抽取纸质技术书 提起分库分表&#xff0c;对于大部分服务器开发来说&#xff0c;其实并不是一个新鲜的名词。随着业务的发展&#xff0c;我们表中的数据量会变的越来越大&#xff0c;字段也可能随着业务复杂度的升高而逐渐增多…