潜在的场景是什么?当单个MySQL表的数据量过大时,数据库的访问速度会下降。“大数据量”问题的常见解决方案是“水平切分”。MySQL常见的水平切分方案有哪些?分库分表;分区表。画外音:我的C,我从来没有听说过分区表,有的小伙伴很诧异。什么是分库分表?把一个大库(表)的数据分成几个库(表)。每个库(表)的结构相同,但可以分布在不同的MySQL实例中,甚至分布在不同的物理机中,以达到减少单个库(表)的数据量,提高读写性能的目的。分库分表有什么缺点?分库分表往往由业务层来实现。分库分表后,经常需要对系统进行升级:修改一些SQL代码;丢失一些SQL函数。什么是分区表?所有数据在逻辑上都在一个表中,但在物理上,它们可以按照一定的规则放在不同的文件中。这是MySQL5.1之后支持的功能,业务代码不用改。分区表看起来很帅气。为什么大部分互联网公司不使用,而是选择分库分表进行水平切分?分区表的一些缺点对于大数据量和高并发业务是不能接受的:如果SQL不使用partitionkey,很容易出现全表锁;在分区表中实现关联查询是一场灾难;分库分表,自己控制业务场景和访问方式,可控;分区表,工程师写了一个SQL,我无法确定MySQL是如何工作的,也无法控制;画外音:类似的,不要在存储过程、自定义函数、触发器中实现业务逻辑,而是在业务代码中实现。DBA为OP埋坑,容易发生暴力冲突,引起同事间的矛盾;……当然,在一些数据量和并发量都不是太大的特定场景下,或者存储冷热数据或者按时间归档数据时,分区表还是有发挥的机会的。画外音:比如按时间分区,存储日志。希望这一分钟得到回报。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文
