
MySQL分区表对NULL值的处理
1.概述
MySQL的分区表没有禁止NULL值作为分区表达式的值,无论它是列值还是用户提供的表达式的值,需要记住NULL值不是数字。MySQL的分区实现中将NULL视为小于任何非NULL值,与order by类似。
2.range分区表处理NULL
1.创建range分区表
2.插入2条分区列为null值的数据
3.查看数据的分布情况
可以看到分区列包含null值的2条数据都分布在p0分区上。
3.list分区表处理NULL
1.创建2张list分区表,t_list1分区列包含null值,t_list2分区列中不包含null值
2.分别向2张表中插入2条分区列为null值的数据
可以看到 t_list2 表的分区列中不包含null值,所以数据插入失败。
3.查看数据的分布情况
可以看到 t_list1 表中插入的2条包含null值的数据,由于p3分区包含null值列,所以2条数据分布在p3分区中。
4.hash/key分区表处理NULL
1.创建2张测试表,一张hash分区表,一张key分区表
2.分别向2张表中插入3条数据
3.查看数据的分布情况
可以看到分区列中包含null值的记录都在p0分区。
4.如果我们增加hash/key分区表的分区数,分区列为null值的记录会分布到其他分区
可以看到,当hash/key分区表的分区数为3时,分区列为null值的记录分布在了p2分区。
5.总结
range分区表:如果插入记录的分区列值为NULL,则将该行记录插入到最小的分区中。
list分区表:对NULL值的处理有2种方式:
(1)当且仅当只有一个分区使用包含NULL的值做分区表达式时(例如:PARTITION p3 VALUES IN (NULL)),允许插入分区列为NULL的值。
(2)当表中没有显示使用包含NULL的值做分区表达式时,会拒绝插入分区列为NULL的值。
hash/key分区表:对NULL的处理略有不同,不同的分区数,会导致分区列为NULL值的记录分布到不同的分区。
本文转载自公众号:GreatSQL社区
