天天看点

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

SQL Server表分区只支持range分区这一种类型,往往会被大家吐槽

人家MySQL支持四种类型:RANGE分区、LIST分区、HASH分区、KEY分区

共同点是MySQL跟SQL Server也有分区对齐的问题,都是水平切分,大家都允许分区列存在NULL值

这次我们测试SQL Server表分区的分区列的NULL值,究竟NULL值是被存放在哪个区间,以前一直没有注意

测试脚本

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

View Code

插入测试数据

表数据如下

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

分区分布

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

分区情况

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

第二个视图直接把NULL值忽略了

根据第一个视图,我们画出一个总结图

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

分析一下

SQL Server表分区的NULL值问题SQL Server表分区的NULL值问题

总结

结论其实很清晰,分区列不要允许NULL,如果允许列,那么我们交换分区归档数据的时候就会有麻烦了,因为无法判断分区列是NULL值的那些数据行是老数据还是新数据