DOCUMENTATION: https://dev.mysql.com/doc/refman/8.0/en/partitioning.html

简单介绍

image.png
上图的CREATE TABLE部分是我们常用的建表语句,没什么特别的。
下半部分是按 范围分区的语句,可以看到是按照 store_id来分的。

总的来说,类似分库分表。但是没分区分表好,限制太多了。当然有些特殊需求,这个还是可以的。

应用场景

1.表太大

有时候一些操作没法一下子放到内存中,或者只有最近的几行数据用到,其他几百万行都是历史数据

2.易维护

比如批量对某部分数据 优化,检查,删除。

3.物理分区

分到不同的物理设备上

4.避免特殊瓶颈

1.innoDB的单个索引互斥访问
互斥访问:innoDB是按照索引加的锁,有时候锁等待时间会比较长
2.ext3文件系统的inode锁竞争

5.方便备份

限制

1.按主键,唯一索引列分区

如果是按主键或者唯一索引列进行分区的,那么所有的主键和唯一索引列都应该包含进来

2.无法使用外键约束

3.update分区列

如果要更新分区列的话,需要删除原分区的数值,然后再在新分区插入,会比较麻烦

4.null值会对分区规则无效