未分區的表,只能存儲在一個FileGroup中;對Table進行分區後,每一個分區都存儲在一個FileGroup,或分散式存儲在不同的FileGroup中。對錶進行分區的過程,是將邏輯上完整的一個表,按照特定的欄位拆分成多個分區,分散到(相同或不同的)FileGroup中,每一個部分叫做表的一個分區 ...
未分區的表,只能存儲在一個FileGroup中;對Table進行分區後,每一個分區都存儲在一個FileGroup,或分散式存儲在不同的FileGroup中。對錶進行分區的過程,是將邏輯上完整的一個表,按照特定的欄位拆分成多個分區,分散到(相同或不同的)FileGroup中,每一個部分叫做表的一個分區(Partition)。
分區(Partition)的特性是:
- 每一個Partition在FileGroup中都獨立存儲,分區之間是相互獨立的
- 每一個parititon都屬於唯一的表對象,
- 每一個Partition 都有唯一的ID,
- 每一個Partition都有一個編號(Partition Number),同一個表的分區編號是唯一的,從1開始遞增;
對錶進行分區,能夠將數據的操作局限在某一個分區中,從而減少數據查找的IO次數,降低產生Deadlock和阻塞的概率,提供數據更新的併發度,提高查詢性能。
在創建表時,使用On 子句指定table存儲的邏輯位置:
- ON filegroup | "default" :表示邏輯存儲位置是單一的FileGroup;
- ON partition_scheme_name ( partition_column_name ) :表示邏輯存儲位置是分區架構,按照partition_column將table拆分成多個partition,每一個partition都存儲在一個指定的Filegroup中;
CREATE TABLE [schema_name . ] table_name
( <column_definition> )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ]
[ WITH ( <table_option> [ ,...n ] ) ]
[ ; ]
從存儲空間來理解分區,Partition實際上是表的一部分邏輯存儲空間。未分區表的邏輯存儲位置是FileGroup,分區表的邏輯存儲位置是Partition Scheme,但是,FileGroup指定一個特定的邏輯存儲位置,而Partition Scheme是分散式的,能夠將數據分散式存儲到不同的FileGroup中去。
跟邏輯存儲空間相對應的是物理存儲空間,物理存儲空間是由File指定的,FileGroup是File的集合,每一個File都屬於唯一的FileGroup。將table的存儲空間拆分到不同的FileGroup中,將table的物理存儲空間分佈到不同的File中,只不過,不再是某一個FileGroup。實際存儲數據的文件仍然是File。
在SQL Server中,File Group和Partition Scheme統稱為Data Sapce(數據空間),預設的Data Space是Primary,即主文件組。
新建分區表分為三步,分別是:
Step1, 創建分區函數
分區函數的作用是提供分區欄位的類型和分區的邊界值,進而決定分區的數量
CREATE PARTITION FUNCTION [pf_int](int)
AS RANGE LEFT
FOR VALUES (10, 20)
分區函數pf_int 的含義是按照int類型分區,分區的邊界值是10,20,left表示邊界值屬於左邊界。兩個邊界值能夠分成三個分區,別是(-infinite,10],(10,20],(20,+infinite)。
Step2,創建分區架構(Scheme)
分區架構的作用是為Parition分配FileGroup,在邏輯上,Partition Scheme和FileGroup是等價的,都是數據存儲的邏輯空間,只不過Partition Scheme指定的是多個FileGroup。
CREATE PARTITION SCHEME [ps_int]
AS PARTITION [pf_int]
TO ([PRIMARY], [db_fg1], [db_fg1])
不管是在不同的FileGroup中,還是在相同的FileGroup中,分區都是獨立存儲的。
Step3,新建分區表
新建分區表,實際上是在創建Table時,使用on子句指定數據存儲的邏輯位置是分區架構(Partition Scheme)
create table dbo.dt_test
(
ID int,
code int
)
on [ps_int] (id)
參考文檔:
Create Partitioned Tables and Indexes