天天看點

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值的那些資料行是老資料還是新資料