Partition1:新建分區表


未分區的表,相當於只有一個分區,只能存儲在一個FileGroup中;對表進行分區后,每一個分區都存儲在一個FileGroup,或分布式存儲在不同的FileGroup中。對表進行分區的過程,實際上是將邏輯上完整的一個表,按照特定的字段拆分成多個分區,分散到相同或不同的FileGroup中,每一個部分叫做表的一個分區(Partition),一個分區實際上是一個獨立的,內部的物理表。也就是說,分區表在邏輯上是一個表,而在物理上是多個完全獨立的表。

分區(Partition)的特性是:

  • 每一個Partition在FileGroup中都獨立存儲,分區之間是相互獨立的
  • 每一個parititon都屬於唯一的表對象,
  • 每一個Partition 都有唯一的ID,
  • 每一個Partition都有一個編號(Partition Number),同一個表的分區編號是唯一的,從1開始遞增;

當表分區后,加鎖的粒度從表級別降低到分區級別,這使得對一個分區執行更新操作,同時不會影響另一個分區的讀取操作。因此,分區可以降低並發查詢系統產生死鎖和阻塞的概率,提高數據操作的並發度。在創建表時,使用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中,分區都是獨立存儲的。

分區scheme的所有分區都存儲到相同的文件組中:

CREATE PARTITION SCHEME [ps_int] 
AS PARTITION [pf_int] 
ALL TO ([PRIMARY])

Step3,新建分區表

新建分區表,實際上是在創建Table時,使用on子句指定數據存儲的邏輯位置是分區架構(Partition Scheme)

create table dbo.dt_test ( ID int, code int ) on [ps_int] (id)

二,查看分區編號(Partition Number)

分區編號(Partition Number) 從1開始,從最左邊的分區向右依次遞增+1,邊界值最小的分區編號是1,

例如,對於以下分區函數:

CREATE PARTITION FUNCTION pf_int_Left (int)
AS 
RANGE LEFT 
FOR VALUES (10,20);

分區的邊界值(Boundary Value)是10,20, 邊界值屬於左邊界(Range Left),該分區函數 pf_int_Left 划分了三個分區(Partition),范圍區間是:(-infinite,10], (10,20], (20,+infinite),(小括號表示不包括邊界值,中括號表示包括邊界值),系統分配的分區編號分別是:1,2,3。用戶可以通過使用$Partition函數 查看分區編號,調用語法格式是:

$Partition.Partition_Function(Partition_Column_Value)

例如,通過$Partition函數 查看分區列值為21時,該行數據所在的分區編號:

select $Partition.pf_int_left(21)

由於分區列值是21, 屬於范圍(20,+infinite),因此分區編號是:3。

 

參考文檔:

Create Partitioned Tables and Indexes


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM