Skip to main content

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!但是追加可以直接进行!具体原因没有将,有自己的实现!