SQL Server資料表分割: Table Partitioning

Select *
Program
Published in
Jul 10, 2021

Table Partitioning,將資料龐大的Table依照指定的區塊切分為數個小Table,讓查詢Table時只會從特定區間內的小Table去抓資料,減少資料庫搜尋整張Table的時間與效能。
後記:新增切割範與MERGE RANGE。

Table Partitioning步驟

  • 建立檔案群組
  • 新增檔案至群組
  • 建立Partition Function(分割範圍)
  • 建立 Partition Schema(依檔案群組)
  • 建立要分割的資料表

建立檔案群組

在資料庫建立檔案群組,將群組以年度做區分,建立FileGroup_2015~FileGroup_2021。

新增檔案至群組

在每個檔案群組中加入檔案做儲存。

完成後,在物件總管>資料庫點右鍵>選擇屬性,在資料庫屬性的檔案群組中可看到剛剛新增的群組及檔案。

物件總管>資料庫點右鍵>選擇屬性,資料庫屬性中新增的群組及檔案。

建立Partition Function(分割範圍)

建立Function,依年分切割成2015年~2021年的區間。
RANGE RIGHT: 表示臨界值的資料會是屬於右邊的區塊。
RANGE LEFT: 表示臨界值的資料會是屬於左邊的區塊。

建立 Partition Schema(依檔案群組)

建立Schema,指定存放分割後區塊的資料。
最後一個Primary為預留,當有資料超出切割範圍(2015~2021年),會存放於Primary中。

建立要分割的資料表

建立資料表,並指定欄位「訂單日期(order_date)」依照Partition Schema(ParSch_Year)做分割。
如Table有設定主鍵(Primary Key),則分割欄位也必須是主鍵之一。

查詢系統資料表

查看資料分割至不同區塊的筆數統計。

後記

新增切割範圍

— 指定下個新分割區要使用的檔案群組
ALTER PARTITION SCHEME PartitionSchema名稱 NEXT USED [檔案群組];
--建立新的分割區
ALTER PARTITION FUNCTION PartitionFunction名稱 SPLIT RANGE (切割的值);

Example :
ALTER PARTITION SCHEME ParSch_Year NEXT USED [FileGroup_2022];

ALTER PARTITION FUNCTION ParFun_Year SPLIT RANGE ('2022–12–31 00:00:00:.000');

刪除特定分割區資料

TRUNCATE TABLE 資料表名稱 WITH(Partitions(sys.partitions的partition_number欄位))

Example :
TRUNCATE TABLE orderlist WITH(Partitions("1"))

Merge分割區

ALTER PARTITION FUNCTION PartitionFunction名稱 MERGE RANGE (切割的值)

Example :
ALTER PARTITION FUNCTION ParFun_Year MERGE RANGE ('2015–12–31 00:00:00.000')

--

--