mysql分区
MySQL 分区
分区的好处:
- 分布式存储
- 提高查询性能
- 解耦合, 易于后续删除
- 并行处理
因而即使一台机器放的下, 也可能需要partition
支持: 仅支持水平分区, 不支持垂直分区
几种分区模式:
-
range分区 LESS THEN, 指定某几列, 不允许浮点数
-
适合RANGE分区的场景
- 范围查询频繁:如果经常需要查询特定范围内的订单,RANGE分区可以显著提高查询性能。
- 数据生命周期管理:如果订单数据有明确的生命周期,可以按时间范围分区,方便删除旧数据。
- 写入负载均衡:如果订单数据写入量很大,分区可以将写入操作分散到多个分区,提高整体的写入性能。
-
-
不适合RANGE分区的场景
- 数据分布不均:如果
orderid
的生成方式不均匀,导致某些分区数据量远大于其他分区,影响分区的平衡性。 - 频繁的跨分区查询:如果查询经常涉及多个分区,可能会导致性能下降。
- 分区数量频繁调整:如果订单数据量非常大,需要频繁调整分区策略,增加了维护成本
- 例如order就不适合以orderid range分区, 冷热数据分明, 且查询基本以用户为单位, 且数量不均匀, 更适合按照用户数量负载均衡hash或者按照时间范围分区进行更好的冷热分离, 又或者按特定的tag LIST分区
- 数据分布不均:如果
-
LIST分区 离散数据指定某个list之中的被分到哪里
-
hash分区
-
key hash 自动根据主键hash分区
[问题处理](https://web-arch.ayaka.space/docs/review/数据库部分/第18章 MySQL分区#六问题处理)
- NULL处理:如果遇到了NULL数值,这种插入的东西会被放到最小的一个分区里面(范围最低的一个分区)而对于List分区,允许in Null专门创建一个分区;对于Hash分区,null都会被当做0然后送到hash函数里面
- 调整分区(重新组织分区):比较耗时间,调整涉及到整个表格
- 删除分区:如果用的分区规则全是小于,那么删除一个分区就会导致原来存储的数据删除,但是后面新的输入插入进来的时候就会进入正确的分区。
- 特别提示:不允许drop 分区(通过Hash分区或者key散列的)!一旦drop,那么整个分区的数量就发生变化,那么假如之前是取模运算,现在分区数量改变,所有的存储都要发生大变化!除非重新调整,而且不是用reorginaze,用的语法是coalesce!但是追加可以直接进行!具体原因没有将,有自己的实现!