Partition2 對現有表分割槽有那些翻譯裂變

2021-10-25 12:46:47 字數 4289 閱讀 9968

在sql server中,普通表可以轉化為分割槽表,而分割槽表不能轉化為普通表,普通表轉化成分割槽表的過程是不可逆的,將普通表轉化為分割槽表的方法是:

在分割槽架構(partition scheme)上建立聚集索引,就是說,將聚集索引分割槽。

資料庫中已有分割槽函式(partition function) 和分割槽架構(partition scheme):

view code

如果在普通表上存在聚集索引,並且聚集索引列是分割槽列,那麼重建聚集索引,就能使表轉化成分割槽表。聚集索引的建立有兩種方式:使用clustered 約束(primary key 或 unique約束)建立,使用 create clustered index 建立。

一,在分割槽架構(partition scheme)上,建立聚集索引

如果聚集索引是使用 create clustered index 建立的,並且聚集索引列就是分割槽列,使普通表轉換成分割槽表的方法是:刪除所有的 nonclustered index,在partition scheme上重建clustered index

1,表dbo.dt_partition的聚集索引是使用 create clustered index 建立的,

複製**

create table dbo.dt_partition

(id int,

code int

)create clustered index cix_dt_partition_id

on dbo.dt_partition(id)

複製**

2,從系統表partition中,檢視該錶的分割槽只有乙個

select *

from sys.partitions p

where p.object_id=object_id(n』dbo.dt_partition』,n』u』)

3,使用partition scheme,重建表的聚集索引

create clustered index cix_dt_partition_id

on dbo.dt_partition(id)

with(drop_existing=on)

on ps_int_left(id)

4,重建聚集索引之後,表的分割槽有三個

select *

from sys.partitions p

where p.object_id=object_id(n』dbo.dt_partition』,n』u』)

二,如果表的聚集索引是使用primary key clustered 來建立,並且primary key 就是分割槽列

在sql server中,不能修改約束,將普通表轉換成分割槽表,有兩種方式來實現,第一種方式是:在刪除clustered constraint 時,將資料移動到分割槽scheme上;第二種方式,刪除clustered constraint,在分割槽scheme上重建clustered constraint。

1,在刪除clustered 約束時,將資料移動到分割槽scheme上

使用 alter table drop constraint 命令,在刪除聚集索引時,將資料移動到指定的partition scheme上,此時該錶變成分割槽的堆表:

alter table schema_name . table_name

drop [ constraint ] constraint_name

[ with ( move to )]

move to 選項的作用是將table移動到新的location中,如果新的location 是partition scheme,那麼在刪除clustered 約束時,sql server將表資料移動到分割槽架構中,這種操作和使用 create table on partition scheme建立分割槽表的作用相同。

複製**

create table dbo.dt_partition_pk

(id int not null constraint pk__dt_partition_id primary key clustered ,

code int not null

)alter table dbo.dt_partition_pk

drop constraint pk__dt_partition_id

with( move to ps_int_left(id))

複製**

2,刪除clustered 約束,在partition scheme上重建clustered 約束

複製**

create table dbo.dt_partition_pk

(id int not null constraint pk__dt_partition_id primary key clustered ,

code int not null

)alter table dbo.dt_partition_pk

drop constraint pk__dt_partition_id

alter table dbo.dt_partition_pk

add constraint pk__dt_partition_id primary key clustered(id)

on ps_int_left(id);

複製**

三,將堆表轉換成分割槽表

使堆表轉換成分區,只需要在堆表上建立乙個分割槽的clustered index

複製**

create table dbo.dt_partition_heap

(id int not null,

code int not null

)create clustered index cix_partition_heap_id

on dbo.dt_partition_heap(id)

on ps_int_left(id)

複製**

四,普通表轉化成分割槽表的過程是不可逆的,普通表能夠轉化成分割槽表,而分割槽表不能轉化成普通表。

普通表儲存的location是filegroup,分割槽表儲存的location是partition scheme,在sql server中,儲存表資料的location叫做data space。通過在partition scheme上建立clustered index ,能夠將已經存在的普通表轉化成partition table,但是,將clustered index刪除,表仍然是分割槽表,轉化過程(將普通表轉換成分割槽表)是不可逆的,乙個partition table 是不能轉化成普通表的,即使通過合併分割槽,使partiton table 只存在乙個partition,這個表的仍然是partition table,這個table的data space 是partition scheme,而不會轉化成file group。

從 sys.data_spaces 中檢視data space ,共有兩種型別,分別是fg 和 ps。fg是file group,意味著資料表的資料儲存在file group分配的儲存空間,乙個table 只能存在於乙個filegroup中。ps 是partition scheme,意味著將資料分布式儲存在不同的file groups中,儲存資料的file group是根據partition column值的範圍來分配的。對於分割槽表,sql server從指定的file group分配儲存空間,雖然乙個table只能指定乙個partition scheme,但是其資料卻分布在多個file groups中,這些file groups由partition scheme指定,可以相同,也可以不同。

檢視table的data space,通過索引的data_space_id 欄位來檢視各個索引(聚集索引是表本身)資料的儲存空間:

複製**

select o.name as tablename,o.type_desc,

i.name as indexname,

i.index_id,i.type_desc,i.data_space_id,

ds.name as dataspacename,ds.type_desc

from sys.indexes i

inner join sys.objects o

on o.object_id=i.object_id

inner join sys.data_spaces ds

on i.data_space_id=ds.data_space_id

where i.object_id=object_id(n』[dbo].[dt_test_partition]』)

and i.index_id=0

複製**

在分割槽之前,檢視data_space是name是 primary file group

在分割槽之後,檢視table的 data space 是ps_int partition scheme

MySQL分表(Partition)學習研究報告

最近在開發乙個新的專案,可能會產生大資料量,需要對部分表進行分表操作,故來研究學習mysql的分表功能。以下是此次實驗的結論 insert時,分表和不分表的效能所差無幾 大量資料insert時,大量資料整合成一條sql的效能比逐個insert的效能提高很多 分表與否並不影響查詢操作,其返回的結果還是...

對現有Hive的大表進行動態分割槽

分割槽是在處理大型事實表時常用的方法。分割槽的好處在於縮小查詢掃瞄範圍,從而提高速度。分割槽分為兩種 靜態分割槽static partition和動態分割槽dynamic partition。靜態分割槽和動態分割槽的區別在於匯入資料時,是手動輸入分割槽名稱,還是通過資料來判斷資料分割槽。對於大資料批...

自測 2 素數對猜想 20分

includeint n,m,p int d int flag 0 int count 0 int main for m n m 4 m 2 if flag 0 if flag 0 flag 0 printf d count 上述 在最後乙個測試點顯示執行超時。分割線 include int a 1...