- DataType:資料型態必須和 Partition Column 的資料型態一致
- Boundary Value:資料界限值
- Range Left、Range Right:資料界限值是屬於 Boundary Value 的左邊還是右邊的 Partition
Partition Function 和 User Define Function
兩者是不一樣的 object,Partition Function 只能應用在 Partition Table 且沒有 Database Schema,在 sys.all_objects 或 sys.objects 內無法找到它,要查詢 Partition Function 有兩種方法:
- SSMS:DB => 儲存體 => 資料分割函數
- T-SQL:sys.partition_functions
依日期為分割依據,建議利用 RANGE RIGHT 且依每個月 1 號為 Boundary Value,不要利用月底,畢竟不是每個月都是相同天數 EX:0131、0228(0229)、0430,使用上會較單純。
以 20130901、20131001、20131101 為 Boundary Value 來說明:
RANGE LEFT 切成 Partion 範圍會是
Partition | 範圍 |
---|---|
Partition 1 | min - 20130901 |
Partition 2 | 20130902 - 20131001 |
Partition 3 | 20131002 - 20131101 |
Partition 4 | 20131102 - max |
從 partiton 2、3 可以發現,Partitton 內的資料不單是一個月份的資料,之後需要進行 Switch 的話,因為月份資料混在一起,在管理和維護上會出現問題
RANGE RIGHT 切成 Partition 範圍會是
Partition | 範圍 |
---|---|
Partition 1 | min - 20130831 |
Partition 2 | 20130901 - 20130930 |
Partition 3 | 20131001 - 20131031 |
Partition 4 | 20131101 - max |
從 partiton 2、3 可以發現,每個 Partition 內只會有單一月份資料,月份資料不會混在一起,
每個 Boundary Value 就是月份資料的起點,對於資料解讀上也較直覺
字串資料型態
查詢相關設定
查詢 Partition Table Boundary Value
SELECT
PF.function_id ,
PF.name ,
PF.fanout AS NumPartitions ,
CASE
WHEN PF.boundary_value_on_right = 0 THEN 'LEFT'
ELSE 'RIGHT'
END AS RangeType ,
PP.parameter_id ,
CASE
WHEN PP.system_type_id = PP.user_type_id THEN T1.name
ELSE T2.name
END AS ParameterDataType ,
PRV.boundary_id ,
PRV.value ,
CASE
WHEN PF.boundary_value_on_right = 0 THEN PRV.boundary_id
ELSE PRV.boundary_id + 1
END AS PartitionNumber
FROM sys.partition_functions AS PF
JOIN sys.partition_parameters AS PP ON PF.function_id = PP.function_id
JOIN sys.types AS T1 ON T1.system_type_id = PP.system_type_id
JOIN sys.types AS T2 ON T2.user_type_id= PP.user_type_id
JOIN sys.partition_range_values AS PRV ON PP.function_id = PRV.function_id AND PP.parameter_id = PRV.parameter_id
沒有留言:
張貼留言