天天看點

SqlServer2008R2 分區管理SqlServer2008R2 分區管理

SqlServer2008R2 分區管理

标簽(空格分隔): .Net

  • SqlServer2008R2 分區管理
    • 分區的背景
    • 分區的優劣
    • 分區操作
      • 建立檔案與檔案組
      • 建立分區函數與分區方案
      • 映射資料
      • 檢視分區
        • 參看每個分區的總資料
        • 檢視某個分區的流水
        • 檢視一筆資料屬于哪個分區
      • 删除分區

分區的背景

當資料量太大時,可以通過資料分區來提升效率

分區的優劣

優勢

  • 提供性能:這個是大多人數分區的目的,把一個表分部到不同的硬碟或其他存儲媒體中,提高并發,會大大提升查詢速度。
  • 提高穩定性:當一個分區出了問題,不會影響其他分區,僅僅是目前壞的分區不可用。
  • 便于管理:把一個大表分成若幹個小表,則備份和恢複的時候不再需要備份整個表,可以單獨備份分區。
  • 存檔:将一些不太常用的資料,單獨存放。如:将1年前的資料記錄分到一個專門的存檔伺服器存放。

劣勢

  • 跨分區的查詢資料處理不好速度會減慢

分區操作

建立檔案與檔案組

一個檔案隻可以對應一個檔案組,一個檔案組可以對應多個檔案,最終資料是相對于檔案組操作,這樣資料操作更簡單,而一個檔案組中包含多個檔案的話,資料插入是按初始比例插入

查詢效率:單一檔案組多分區檔案 > 多檔案組多分區檔案 >單一檔案組單一分區檔案 > 預設

參考别人連結:https://www.cnblogs.com/knowledgesea/p/3696912.html

文法:alter database <資料庫名> add filegroup <檔案組名>
alter database FenQuTest add filegroup Group1
alter database FenQuTest add filegroup Group2
alter database FenQuTest add filegroup Group3

文法:alter database <資料庫名稱> add file <資料辨別> to filegroup <檔案組名稱>

--<資料辨別> (name:檔案名,fliename:實體路徑檔案名,size:檔案初始大小kb/mb/gb/tb,filegrowth:檔案自動增量kb/mb/gb/tb/%,maxsize:檔案可以增加到的最大大小kb/mb/gb/tb/unlimited)

alter database FenQuTest add file (name=N'g1',filename=N'C:\fq\g1.ndf',size=5Mb,filegrowth=5mb) to filegroup Group1
alter database FenQuTest add file (name=N'g2',filename=N'C:\fq\g2.ndf',size=5Mb,filegrowth=5mb) to filegroup Group2 
alter database FenQuTest add file (name=N'g3',filename=N'C:\fq\g3.ndf',size=5Mb,filegrowth=5mb) to filegroup Group3
           

建立分區函數與分區方案

分區函數: 以時間(datetime)分割來建立分區方案,等于分割資料的資料歸右邊分區(RANGE RIGHT)
CREATE PARTITION FUNCTION [OrderInfo_SubareaFun](datetime) AS RANGE RIGHT FOR VALUES (
N'2017-07-01T00:00:00',N'2017-08-01T00:00:00', N'2017-09-01T00:00:00')
           
分區方案
CREATE PARTITION SCHEME [OrderInfo_SubareaSCHEME] AS PARTITION [OrderInfo_SubareaFun] TO ([PRIMARY],[Group1],[Group2],[Group3])   
           

映射資料

映射資料:確定表中不含聚集索引
SqlServer2008R2 分區管理SqlServer2008R2 分區管理
SqlServer2008R2 分區管理SqlServer2008R2 分區管理

–删除表中的聚集索引

ALTER TABLE [dbo].[Test] DROP CONSTRAINT [PK__Test_Id]

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [PK__Test_Id] PRIMARY KEY NONCLUSTERED

(

[Id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

--映射資料
CREATE CLUSTERED INDEX [ClusteredIndex_on_Test_SubareaPlan] ON [dbo].[Test] 
(
    [CreateOn]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [OrderInfo_SubareaSCHEME]([CreateOn])
           

檢視分區

參看每個分區的總資料

SELECT $PARTITION.[OrderInfo_SubareaFun](CreateOn) AS Partition, 
COUNT(*) AS [COUNT]    
FROM dbo.Test    
GROUP BY $PARTITION.[OrderInfo_SubareaFun](CreateOn)    
ORDER BY Partition ;
           

檢視某個分區的流水

SELECT * 
FROM dbo.Test 
WHERE $PARTITION.[OrderInfo_SubareaFun](CreateOn) =3
           

檢視一筆資料屬于哪個分區

select $partition.[OrderInfo_SubareaFun]('2017-9-1') 
           

删除分區

alter partition function OrderInfo_SubareaFun()

merge range(N’1500000’)

繼續閱讀