一、磁區表概念
1.1、什么是磁區表?
磁區表是在SQL Server 2005之后的版本引入的特性,這個特性允許把邏輯上的一個表在物理上分為很多部分,換句話說,磁區表從物理上看是將一個大表分成幾個小表,但是從邏輯上看,還是一個大表,

1.2、磁區與分表的區別
磁區:就是把一張表的資料分成N個區塊,從邏輯上看只是一張表,但底層是由N個物理區塊組成的,
分表:就是把一張表按一定的規則分解成N個具有獨立存盤空間的物體表,
1.3、水平分表與垂直分表的區別
水平分表:將一張表中的資料分成多個表且表結構不變,
垂直分表:將一張表按照欄位分成不同表且表結構發生改變,
二、磁區表優點
2.1、使用多個檔案分布資料到多個硬碟中,可以極大地提高IO性能,
2.2、多個檔案對于資料略多的資料庫來說,備份和恢復都會輕松很多,
三、磁區表場景
3.1、資料庫中某個表的資料量很大,在查詢資料時會明顯感覺到速度很慢,這種情況可以考慮磁區表,
3.2、資料是分段的,如以年份為分隔的資料,對于當前的資料經常進行增刪改查操作,而對于往年的資料幾乎不做操作或只做查詢操作,這種情況可以考慮磁區表,

3.3、對資料的操作如果只涉及一部分資料而非全部資料,這種情況可以考慮磁區表,
3.4、如果一張表的資料經常進行增刪改查操作,而不管年份之類的因素,這種情況最好不要考慮磁區表,
四、磁區表創建
4.1、創建步驟
創建分表區的步驟分為5步:
1)創建資料庫檔案組
2)創建資料庫檔案
注:應將檔案組和檔案存放于不同的硬碟甚至不同的服務器中,因為資料的讀取瓶頸很大程度在于硬碟的讀寫速度,多個硬碟存盤一個表可以實作負載均衡,
3)創建磁區函式
注:宣告磁區的標準,
4)創建磁區方案
注:即哪些區域使用哪個磁區函式,形成完整的磁區方案,
5)創建磁區表
4.2、創建實操
背景:現以表Sales.SalesOrderHeader作為示例,此表有2011-2014年的資料,
磁區:按年進行磁區,此表有2011、2012、2013、2014等4個邊界值,需要5個磁區,分別是2011前、2011、2012、2013、2013后,
描述:磁區表的資料存放于磁區檔案(資料庫ndf檔案)中;磁區檔案存放于磁區檔案組中;磁區檔案組存放于多個硬碟中,
1)對著資料庫點擊"右鍵"->"屬性",

2)點擊"檔案組"->"添加檔案組"->分別建立FG2011BF、FG2011、FG2012、FG2013、FG2013AF等5個檔案組->"確定",

3)點擊"檔案"->"添加"->分別建立FL2011BF、FL2011、FL2012、FL2013、FL2013AF等5個檔案->選擇對應的檔案組及存放路徑->"確定",

4)對著表Sales.SalesOrderHeader點擊"右鍵"->"存盤"->"創建磁區"->"下一步",

5)磁區列選擇"OrderDate"->勾選"將存盤區中的所有非唯一索引和唯一索引與索引磁區列對齊"->點擊"下一步",

6)起個磁區函式名如"SalesOrderHeader_OrderDate"->點擊"下一步",

7)起個磁區方案名如"SalesOrderHeader_OrderDate"->點擊"下一步",

8)映射磁區范圍選擇"左邊界"->點擊"設定邊界"->開始日期:"2011/01/01"、結束日期:"2014/01/01"、日期范圍:"年"->點擊"確定",

9)依邊界值選擇相對應的檔案組->點擊"預計存盤空間"可查看行計數及空間資訊->點擊"下一步",

10)選擇"立即運行"->點擊"下一步"->點擊"完成",

五、磁區表檢查
5.1、檢查磁區函式與磁區方案

5.2、檢查磁區檔案

六、磁區表查詢
6.1、查看磁區及行計數
SELECT CONVERT(VARCHAR(50),A.NAME) Partition_Scheme,D.Partition_Number,CONVERT(VARCHAR(10),E.NAME) FileGroup, CONVERT(VARCHAR(19),ISNULL(G.VALUE,''),120) Range_Boundary,STR(D.ROWS,9) Rows FROM SYS.PARTITION_SCHEMES A INNER JOIN SYS.DESTINATION_DATA_SPACES B ON A.DATA_SPACE_ID=B.PARTITION_SCHEME_ID INNER JOIN SYS.INDEXES C ON A.DATA_SPACE_ID=C.DATA_SPACE_ID INNER JOIN SYS.PARTITIONS D ON B.DESTINATION_ID=D.PARTITION_NUMBER AND C.OBJECT_ID=D.OBJECT_ID AND C.INDEX_ID=D.INDEX_ID INNER JOIN SYS.DATA_SPACES E ON B.DATA_SPACE_ID=E.DATA_SPACE_ID INNER JOIN SYS.PARTITION_FUNCTIONS F ON A.FUNCTION_ID=F.FUNCTION_ID LEFT JOIN SYS.PARTITION_RANGE_VALUES G ON F.FUNCTION_ID=G.FUNCTION_ID AND D.PARTITION_NUMBER-F.BOUNDARY_VALUE_ON_RIGHT=G.BOUNDARY_ID WHERE C.OBJECT_ID=OBJECT_ID('SALES.SALESORDERHEADER') --磁區表名 AND C.INDEX_ID IN (0,1) ORDER BY Partition_Scheme,D.Partition_Number
6.2、查看檔案及檔案組
SELECT A.[NAME],A.PHYSICAL_NAME,A.[SIZE],A.GROWTH,B.[NAME] [FILEGROUP],B.IS_DEFAULT FROM SYS.DATABASE_FILES A INNER JOIN SYS.FILEGROUPS B ON A.DATA_SPACE_ID=B.DATA_SPACE_ID
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/303787.html
標籤:其他
