LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

MS SQL Server 數(shù)據(jù)庫表分區(qū)

admin
2024年7月18日 16:54 本文熱度 1191

什么是表分區(qū)?
表分區(qū)其實就是將一個大表分成若干個小表。
表分區(qū)可以從物理上將一個大表分成幾個小表,但是邏輯上還是一個表。所以當執(zhí)行插入、更新等操作的時候,不需要我們去判斷應該插入或更新到哪個表中。只需要插入大表中就可以了。SQL Server會自動的將它放在對應的表中。對于查詢也是一樣,直接查詢大表就可以了。 

如何創(chuàng)建分區(qū)表

一、創(chuàng)建文件組

其實可以使用默認的primary組,但是為了更方便管理以及提高運行速度,所以還是應該創(chuàng)建幾個分組。

1、使用SSMS創(chuàng)建文件組

2、使用T-SQL創(chuàng)建文件組

--alter database <數(shù)據(jù)庫名> add filegroup <文件組名>

alter database webDB add filegroup group2013

alter database webDB add filegroup group2014

alter database webDB add filegroup group2015

二、為文件組添加數(shù)據(jù)庫文件

1、使用SSMS添加數(shù)據(jù)庫文件

2、使用T-SQL添加數(shù)據(jù)庫文件

--alter database <數(shù)據(jù)庫名稱> add file <數(shù)據(jù)標識> to filegroup <文件組名稱>

alter database webDB add file

(

    name='web2013',

    filename='D:\web2013.ndf',

    size=5mb,

    filegrowth=5mb

)

to filegroup group2013

alter database webDB add file

(

    name='web2014',

    filename='D:\web2014.ndf',

    size=5mb,

    filegrowth=5mb

)

to filegroup group2014


alter database webDB add file

(

    name='web2015',

    filename='D:\web2015.ndf',

    size=5mb,

    filegrowth=5mb

)

to filegroup group2015

注意:盡可能的將不同的文件放在不同的硬盤分區(qū)里,或者獨立硬盤中。這樣可以加快SQL Server運行速度。

三、創(chuàng)建分區(qū)函數(shù)

分區(qū)函數(shù)用來告訴SQL Server用什么樣的規(guī)則進行分區(qū),這一步必須使用T-SQL腳本來執(zhí)行了。

create partition function fenqu(datetime) --分區(qū)函數(shù)名

as range right  --right分區(qū)方式 邊界值去左表還是右表

for values ('2014-01-01','2015-01-01') --按這些值來分區(qū) 

--group2013 : 2014-01-01 之前的

--group2014 : 2014-01-01 到 2014-12-31的

--group2015 : 2015-01-01 之后的

四、創(chuàng)建分區(qū)方案

create partition scheme SchemeFenqu --分區(qū)方案名

as partition fenqu    --之前創(chuàng)建的分區(qū)函數(shù)

to(group2013,group2014,group2015) --跟放的文件組

創(chuàng)建完分區(qū)函數(shù)和分區(qū)方案后可以在存儲中查看

五、創(chuàng)建分區(qū)表

create table fenquTable

(

    id int identity(1,1) not null,

    name varchar(20) not null,

    createTime datetime not null

) on SchemeFenqu(createTime) --調用分區(qū)方案

注意:不可以使用聚集索引,因為聚集索引是存在連續(xù)的物理地址中的,而表分區(qū)是將數(shù)據(jù)分別存儲在不同表中的。

至此物理上分離的,邏輯上一體的分區(qū)表就創(chuàng)建完了。

操作分區(qū)表

一、插入數(shù)據(jù)

--插入測試數(shù)據(jù)

insert into fenquTable(name,createTime) values ('隔壁老王','2010-01-01')

insert into fenquTable(name,createTime) values ('隔壁老張','2011-01-01')

insert into fenquTable(name,createTime) values ('隔壁老趙','2012-01-01')

insert into fenquTable(name,createTime) values ('隔壁老李','2013-01-01')

insert into fenquTable(name,createTime) values ('老李兒子','2013-10-01')

insert into fenquTable(name,createTime) values ('隔壁老田','2014-01-01')

insert into fenquTable(name,createTime) values ('隔壁老梁','2015-01-01')

insert into fenquTable(name,createTime) values ('老梁姑娘楠楠','2015-10-10')

跟插入普通表沒有任何區(qū)別,不用管他放在哪個物理磁盤上。

二、查詢數(shù)據(jù)

--查詢數(shù)據(jù)

select * from fenquTable

查詢也是如此,不用考慮哪個磁盤,邏輯上都屬于同一個表,基本上看不出區(qū)別。如果需要查看哪條插入到哪個物理的分區(qū)表中,可以使用$partition函數(shù)查看。

--語法:$partition.分區(qū)函數(shù)名(表達式)

--查看該表達式下有多少數(shù)據(jù)

select $partition.fenqu('2015-01-01') --返回3


--查看分區(qū)表明細

select * from fenquTable where $partition.fenqu(createTime)=1

select * from fenquTable where $partition.fenqu(createTime)=2

select * from fenquTable where $partition.fenqu(createTime)=3


--查看分區(qū)表中的記錄數(shù)

select $partition.fenqu(createTime) as 分區(qū),count(id) from fenquTable 

group by $partition.fenqu(createTime)

三、修改數(shù)據(jù)

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量 from fenquTable

group by $partition.fenqu(createTime)

--分區(qū)    數(shù)量

--1            5

--2            1

--3            2


update fenquTable set createTime ='2015-01-01' where id = 1


select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量 from fenquTable

group by $partition.fenqu(createTime)

--分區(qū)    數(shù)量

--1            4

--2            1

--3            3

可以明顯看到,跟普通修改沒有區(qū)別,SQL Server可以自動幫我們重新劃分分區(qū),將數(shù)據(jù)從第一個分區(qū)移動到第五個分區(qū)中。

普通表轉分區(qū)表

上面介紹了如何在創(chuàng)建表的時候進行分區(qū),但往往我們需要的是將現(xiàn)有的普通表在數(shù)據(jù)保留的情況下進行分區(qū)。

普通表一般都有主鍵,同時還是聚集索引。分區(qū)是以某個字段為條件進行的,而除了這個字段其他字段是不可以創(chuàng)建聚集索引的。所以需要先刪除表中的聚集索引,再新建一個聚集索引。

--刪除主鍵,自動同時刪除索引

alter table newTable drop constraint PK_newTable 


--創(chuàng)建主鍵,但不創(chuàng)建聚集索引

alter table newTable add constraint PK_newTable

primary key nonclustered --非聚集

(

    id asc

) on [primary]


--然后給我們親愛的時間創(chuàng)建一個聚集索引

create clustered index CT_newTable on newTable(createTime)

on schemeFenqu(createTime) --并調用分區(qū)方案


--然后再查詢分區(qū),發(fā)現(xiàn)數(shù)據(jù)保留情況下,已經(jīng)將數(shù)據(jù)按規(guī)則進行分區(qū)了

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

添加分區(qū)

向上面只分了3個區(qū),而15年以后的都存在第三個分區(qū)中,到16年還是會存在這個分區(qū)中,這時候需要再新加一個16年的分區(qū)。

添加新的分區(qū)意味著要新建一個文件組和文件來存放這個分區(qū)表,然后在分區(qū)方案中用到這個文件組,最后再修改一下分區(qū)函數(shù)的規(guī)則即可。文件組和分區(qū)數(shù)量要保持一致。

--創(chuàng)建文件組

alter database webDB add filegroup group2016


--添加數(shù)據(jù)庫文件

alter database webDB add file

(

    name='web2016',

    filename='D:\web2016.ndf',

    size=5mb,

    filegrowth=5mb

)

to filegroup group2016


--修改分區(qū)方案

alter partition scheme SchemeFenqu

next used group2016


--修改分區(qū)函數(shù)

alter partition function fenqu()

split range('2016-01-01')


--添加2016年數(shù)據(jù)

insert into newTable (name,createTime) values ('16年小明','2016-03-05')


--查看分區(qū)及統(tǒng)計

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

刪除分區(qū)

刪除分區(qū)就是將分區(qū)函數(shù)中多余的邊界值刪除。

如:2013,2014,2015,2016 現(xiàn)在需要將13年和14年進行合并,刪除13年的分區(qū)。

--查看分區(qū)及統(tǒng)計

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

--分區(qū)    數(shù)量

--1        4

--2        1

--3        3

--4        1


--刪掉該邊界值

alter partition function fenqu() merge range('2014-01-01')


--再次查詢

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

--分區(qū)    數(shù)量

--1        5

--2        3

--3        1

拆分分區(qū)

有的時候某一分區(qū)中數(shù)據(jù)量過大,需要將這個分區(qū)再次拆分為多個分區(qū),以加快訪問速度。

拆分分區(qū)的操作其實與添加分區(qū)類似,首先要添加文件組、文件、修改分區(qū)方案、修改分區(qū)函數(shù)(新增一個邊界值)。

如:2014,2015,2015年6月份以上一個 6月份一下一個。

--查看分區(qū)及統(tǒng)計

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

--分區(qū)        數(shù)量

--1            5

--2            3

--3            1


--創(chuàng)建文件組

alter database webDB add filegroup group2014_2015


--添加數(shù)據(jù)庫文件

alter database webDB add file

(

    name='web2014_2015',

    filename='D:\web2014_2015.ndf',

    size=5mb,

    filegrowth=5mb

)

to filegroup group2014_2015


--修改分區(qū)方案

alter partition scheme SchemeFenqu

next used group2014_2015


--修改分區(qū)函數(shù)

alter partition function fenqu()

split range('2015-06-01')


--查看分區(qū)及統(tǒng)計

select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

--分區(qū)        數(shù)量

--1            5

--2            2

--3            1

--4            1

分區(qū)表轉普通表

--修改分區(qū)函數(shù) 將邊界值都刪除

alter partition function fenqu()

merge range('2013-01-01')

alter partition function fenqu()

merge range('2014-01-01')

alter partition function fenqu()

merge range('2015-01-01')

alter partition function fenqu()

merge range('2015-06-01')


select $partition.fenqu(createTime) as 分區(qū),count(id) as 數(shù)量

from newTable group by $partition.fenqu(createTime)

--這時只有一個分區(qū)了

--分區(qū)    數(shù)量

--1        9

這樣雖然只有一個分區(qū)了,但是查看數(shù)據(jù)表存儲位置,是否進行分區(qū):True,分區(qū)數(shù)1.

--重新建立聚集索引

create clustered index CT_newTable on newTable(createTime)

    with(drop_existing=on) --如果存在則刪除

on [primary]

刪除分區(qū)索引后,重新建立聚集索引,這時再此查看數(shù)據(jù)表的存儲位置,是否分區(qū):Flase。


該文章在 2024/7/22 11:17:34 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲色国产电影在线观看 | 中文乱码字幕国产一区 | 亚洲人成色7777在线观看 | 亚洲精品在线视频 | 日本天堂久久久 | 亚洲Av一级在线播放 |