0%

mysql-partition

1. MySQL支持的分区类型有哪些?

  1. RANGE分区: 这种模式允许将数据划分不同范围. 例如可以将一个表通过年份划分成若干个分区

  2. LIST分区: 这种模式允许系统通过预定义的列表的值来对数据进行分割. 按照List中的值分区, 与RANGE的区别是, range分区的区间范围值是连续的.

  3. HASH分区 : 这中模式允许通过对表的一个或多个列的Hash Key进行计算, 最后通过这个Hash码不同数值对应的数据区域进行分区. 例如可以建立一个对表主键进行分区的表.

  4. KEY分区 : 上面Hash模式的一种延伸, 这里的Hash Key是MySQL系统产生的.

2. 表分区有什么好处?

  1. 存储更多数据. 分区表的数据可以分布在不同的物理设备上, 从而高效地利用多个硬件设备. 和单个磁盘或者文件系统相比, 可以存储更多数据

  2. 优化查询. 在where语句中包含分区条件时, 可以只扫描一个或多个分区表来提高查询效率; 涉及sum和count语句时, 也可以在多个分区上并行处理, 最后汇总结果.

  3. 分区表更容易维护. 例如: 想批量删除大量数据可以清除整个分区.

  4. 避免某些特殊的瓶颈, 例如InnoDB的单个索引的互斥访问.

3. 分区表的限制因素

  1. 一个表最多只能有1024个分区

  2. MySQL5.1中, 分区表达式必须是整数, 或者返回整数的表达式. 在MySQL5.5中提供了非整数表达式分区的支持.

  3. 如果分区字段中有主键或者唯一索引的列, 那么多有主键列和唯一索引列都必须包含进来. 即: 分区字段要么不包含主键或者索引列, 要么包含全部主键和索引列.

  4. 分区表中无法使用外键约束

  5. MySQL的分区适用于一个表的所有数据和索引, 不能只对表数据分区而不对索引分区, 也不能只对索引分区而不对表分区, 也不能只对表的一部分数据分区.