这一小节是有关分区表的事情
分区表在mysql8.0的时候已经不允许myisam进行分区表的创建,应为该方法使用的是通用分区策略,然后就是open_file_limits的默认值是1024,然后就要把所有的分区表都要访问个遍,如果分区多一点,直接就报错了,所以之后就直接禁用这个策略了
这个分区表,在server上是一个,但是在引擎层却有好多个,然后就造成开启事务的时候不同的分区,锁并不是连贯的,例如2017和2018的数据都不在同一个分区内,然后你加锁,之后的操作并不会影响到另外一个分区
现在使用的是Innodb和ndb的本地分区策略,让引擎自己去打开分区,不用server层了
使用分区表的时候分区表影响比较大
在一个事务中查询一个分区,就会对于整个分区表进行MDL加锁,然后如果你对于其他表进行DDL操作的话,就得不到MDL锁,就无法进行操作了,无法写入
小知识点
对于mysql打开分区表时,会浏览整个分区
对于server来说,这些分区共用同一个MDL锁
在引擎层就会认为是不同的分区,然后就会去访问不同的分区
分区表的优点在于可以对于时间分段数据进行分解,然后可以直接通过alter table t drop partition 这个语法删除分区,效果类似于drop,如果使用delete的话,可以更快,并且对于系统的影响比较的小
对于分区表来说,最困惑的就是mdl锁了,所以一般使用分区表的话就不建议使用太多的分区,