mysql 如何把一张表拆分成多表?

上周我正在和同事讨论MySQL分片。
他告诉我两种方法。

垂直表。
分解一长串字段。
他把桌子摆成公用的。
如果不经常使用,请打开另一张。
文本和图像等大字段分开放置。

怎么做。
确定第一部分划分的原则。
创建一个新表。
将数据移过来。
更改了应用程序代码。

度数表。
因为桌子太大了。
将数据按照规则分成几个相同的表。

分割时间。
例如,一个月。
此类的article_2 02 3 01 或者存储旧数据。
文章_旧。

分为几部分。
例如:微妙的新闻和体育。
或通用信息表。
令人羡慕的餐桌。

也按否。
使用散列分割算法。
根据用户 ID 进行哈希处理。

怎么做。
制定规则。
创建一个表。
将数据移过去。
编写一些代码来了解要访问表中的哪些数据。

谁愿意。
这取决于。
如果字段较多,则垂直划分。
如果桌子较大,请将其水平划分。

但是分表比较困难。
数据一致性问题。
搜索表格也很困难。

被遗忘。
这取决于你。

mysql水平分表是什么

不幸的是,当谈到MySQL水平子表时,我确实有一些经验。
记得几年前,我负责的一个项目中,数据量急剧增加。
一张表的数量几乎达到千万级,查询速度慢如蜗牛。
那时我开始研究分表,遇到了很多陷阱。
现在我来和你谈谈。

当时我一开始就按照时间来分表,把每个月的数据放在一个单独的表里,想着这样可以方便查询历史数据。
结果后来发现每个月的数据量还是蛮大的。
分表后,每个月都需要手动创建新表,维护起来相当麻烦。

后来尝试以ID为模进行分表,认为这样可以使数据分布均匀,避免出现一张表“热点”的问题。
但问题又出现了。
我发现用户ID分布不均匀,有的表数据量特别大,查询性能仍然不够好。

后来我尝试按范围分片,并按一系列标识符划分表。
这次好多了:数据分布均匀,查询效率也提高了。
然而,这种方法也有一个问题:如果标识符的增长不均匀,可能会导致数据损坏。

然后我研究了按哈希值对表进行分区。
这次数据分布更加均匀,热点问题得到解决。
然而,哈希函数的选择非常重要。
如果选择不正确,仍然可能会出现热点。

水平子表虽然可以提高性能,但并不是万能的。
例如,路由逻辑的复杂度会增加,表间查询也会变得更加复杂。
而且,当涉及到管理事务和表间操作时,实现起来相当困难。

记得有一次我们团队在做表间转账的时候,事务管理出现了一个问题由于表分片,最终使用分布式事务解决。

总之,应该根据业务需求来定义水平子表。
对于数据量大、读写频繁的业务,比如电商订单、用户日志等,使用子表是相当合适的。
但表分区策略一定要合理,并且要评估系统的复杂度,保证团队有维护能力。
有时您必须考虑使用中间件来简化路由和事务管理。

哎,时钟分裂说起来容易,做起来却不容易。
然而,克服这些陷阱可以看作是对数据库性能优化的更深入的理解。
呵呵,分享给大家,希望对大家有用!

一文详解MySql分表、分库、分片和分区

你的问题有点复杂,我需要仔细思考。
人们很容易对 MySQL 的开关方法感到困惑。
给大家讲一个我遇到的真实情况。

我们来谈谈分片。
我确实经历过一些关于这件事的陷阱。
去年我们电子商务系统的数据量呈爆炸式增长。
当数据量达到数百 GB 时,查询就会陷入困境。
然后老板就着急了,就创建了分片。
我找到了一个叫ShardingSphere的人来搭建分布式集群。
根据ID哈希函数将订单表、用户表等拆分到多个数据库中。
结果?查询速度很快,但是中间件确实很难维护。
路由逻辑写起来很头疼。
如果您的业务逻辑有点复杂,您将需要添加一些额外的功能来检查表中的某些内容。
所以分片是个好东西,但是需要团队来做。
去年,我们的邻居团队尝试了分片,但最终成为了运营和维护的噩梦。

我已经习惯了侧板。
大约三年前,我们的用户属性表大得离谱。
几百MB,任何查询都很慢。
当时我们并没有做分片,只是考虑表分片。
垂直拆分表格,将那些大的字段分开,例如头像和描述。
结果?表越小,查询速度越快。
但在业务方面,编写查询时必须确定从哪个表获取数据,这有点复杂。
之后,我尝试按用户 ID 范围水平拆分表。
这没关系,但是如果你误解了子表规则并且数据不均匀,那就真的很危险了。
因此,划分桌子时一定要结合业务工作,不能随意划分。

分区,我对这个接触不多。
去年我帮助一位朋友创建了一个日志系统。
他的日志表每天有几个GB。
只需转到分区并按范围日期分区即可。
结果?快速检查一下。
如果想查看某一天的数据,可以直接指定分区,节省磁盘I/O。
应用程序端完全不知道分区并且非常透明。
但分区有一个问题,那就是它只能对单个表进行操作。
如果你想跨分区检查或者跨分区连接基本上是不可能的。
那么分区适合什么情况呢?适用于数据量较大但查询方式固定的情况。

对于子库来说,这是最复杂的库。
我们公司大约四年前才推出分行数据库。
当时点餐系统写入压力太大,主数据库无法承受。
所以我创建了一个子库,通过用户 ID 获取模型并将其传播到不同的库中。
子表和子数据库一起使用。
结果?写起来很快,但是跨数据库JOIN就很头疼。
我搞分布式事务半年了,终于出问题了。
因此,子库不能被随机访问。
你要有团队,要有耐心,要有业务量支撑。

一般来说,这些分类方法要视情况而定。
分区最简单,其次是表分区,数据库分区最困难,碎片最复杂。
您必须决定在场景中使用哪一个。
这些都是我经历过的坑,希望对你有帮助。
如果你告诉我具体的场景,我可以给你更详细的解释。