MSSQL Server 創建分區表

分區表的主要目的:
是爲了改善大型表以及具有各種訪問模式的表的可伸縮性和可管理性。


分區一方面可以將數據分爲更小、更易管理的部分,爲提高性能起到一定的作用;
另一方面,對於如果具有多個CPU的系統,分區可以是對錶的操作通過並行的方式進行。


2. 創建分區表或分區索引的步驟
可以分爲以下步驟:
1. 確定分區列和分區數


2. 確定是否使用多個文件組


3. 創建分區函數


4. 創建分區架構


5. 創建分區表


6. 創建分區索引




第一、創建分區表的第一步,先創建數據庫文件組,但這一步可以省略,因爲你可以直接使用PRIMARY文件。
爲了方便管理,還是可以先創建幾個文件組,這樣可以將不同的小表放在不同的文件組裏,既便於理解又可以提高運行速度。
創建文件組的方法很簡單,打開SQL Server Management Studio,找到分區表所在數據庫,
右鍵單擊,在彈出的菜單裏選擇“屬性”。然後選擇“文件組”選項,再單擊下面的“添加”按鈕


第二,創建了文件組之後,還要再創建幾個數據庫文件。
因爲分區的小表必須要放在硬盤上的文件裏. 
再說,文件組中沒有文件,文件組就是多餘的了.
選擇“文件”選項,然後添加幾個文件。在添加文件的時候要注意:
1、不要忘記將不同的文件放在文件組中。當然一個文件組中也可以包含多個不同的文件。
2、如果可以的話,將不同的文件放在不同的硬盤分區裏,最好是放在不同的獨立硬盤裏。
要知道IQ的速度往往是影響SQL Server運行速度的重要條件之一。
將不同的文件放在不同的硬盤上,可以加快SQL Server的運行速度。




-- 第三、創建分區函數, 
-- 創建分區函數的目的是告訴SQL Server以什麼方式對分區表進行分區。
-- 若分區函數存在則先drop掉
-- 創建分區函數給後面的分區方案使用,分區函數就是指定一個範圍確定在某個值爲什麼的時候放在那個分區上
IF  EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'partf_hc')
DROP PARTITION FUNCTION [partf_hc]


CREATE PARTITION FUNCTION partf_hc (datetime)
AS RANGE RIGHT FOR VALUES ('2015-01-01', '2016-01-01')
--1、CREATE PARTITION FUNCTION意思是創建一個分區函數。
--2、partfunSale爲分區函數名稱。
--3、AS RANGE RIGHT爲設置分區範圍的方式爲Right,也就是右置方式。
--4、FOR VALUES ('2015-01-01', '2016-01-01')爲按這幾個值來分區。




-- 第四、創建分區架構.
-- 分區方案的作用是將分區函數生成的分區映射到文件組中去。告訴SQL Server將已分區的數據放在哪個文件組中。
-- 看分區方案是否存在,若存在先drop掉
IF  EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'parts_hc')
DROP PARTITION SCHEME [parts_hc]
GO
--創建分區方案,分區方案需要指定一個分區函數,並指定在分區函數中分的區需要放在哪一個文件組上
create partition scheme parts_hc 
AS 
PARTITION [partf_hc] TO (HC2014,HC2015,HC2016)
GO
-- 1、CREATE PARTITION SCHEME意思是創建一個分區方案。
-- 2、parts_hc 爲分區方案名稱。
-- 3、AS PARTITION partf_hc 說明該分區方案所使用的分區函數爲partf_hc。
-- 4、TO後面的內容是指partf_hc分區函數劃分出來的數據對應存放的文件組。




--創建分區表
if object_id('hitcount','U') is not null
drop table hitcount;
go
create table hitcount
(
[hitdate] [datetime] NOT NULL,
[songid] [nvarchar](20) NOT NULL,
[hitcount] [int] NULL
) on parts_hc(hitdate) --在此處指定該表要使用的分區方案,並將指定分區依據列
go
-- 1、跟創建普通數據表差不多,需要注意的是不能再創建聚集索引, 
-- 因爲聚集索引可以將記錄在物理上順序存儲的,
-- 而分區表是將數據分別存儲在不同的表中,這兩個概念是衝突的
-- 2、on parts_hc說明使用名爲 parts_hc 的分區方案。
-- 3、(hityear)表示用於分區條件的字段是hityear。




-- 插入測試數據
insert into hitcount values ('2013-01-01 00:00:00', '001102', 1); -- 這條數據在1分區上
insert into hitcount values ('2014-01-01 00:00:00', '001102', 1); -- 這條數據在1分區上
insert into hitcount values ('2015-01-01 00:00:00', '001102', 1); -- 這條數據在2分區上
insert into hitcount values ('2016-01-01 00:00:00', '001102', 1); -- 這條數據在3分區上
insert into hitcount values ('2017-01-01 00:00:00', '001102', 1); -- 這條數據在3分區上


-- 查看全部紀錄
select * from hitcount
-- 查看紀錄分部情況
select *, $partition.partf_hc(hitdate) as 分區 from hitcount
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章