1. 在SQL SERVER 2008 R2 SP2之前版本,對分區只支持到1000個分區,之后版本支持到15000個分區。
2. 分區索引對齊並不要求索引和表使用同一分區方案,但要求兩者使用的分區方案本質相同,即:
1) 分區函數的參數具有相同的數據類型;
2) 分區函數定義了相同數目的分區;
3) 分區函數為分區定義了相同的邊界值。
3. 分區合並:合並邊界值所在的分區被刪除,然后向鄰近的分區合並。
4. 查看指定值所屬分區:SELECT $PARTITION.partitionFunctionName('express')
5. 查詢指定分區的數據:
SELECT * FROM [dbo].[TB1]
WHERE $PARTITION.pf_Test(PID)=$PARTITION.pf_Test(2155)
6. 將非分區表裝換成分區表:刪除聚簇索引,新建聚簇索引並指定分區鍵和分區函數,重建非聚簇索引。
7. 對不在同一文件組的兩個分區進行合並,需要考慮合並照成的IO影響,對處於同一個文件組的兩個分區合並,不會造成過多IO影響。
8. 合並分區:ALTER PARTITION FUNCTION patitionFunctionName() MERGE RANGE(rangeValue)
9. 拆分分區:
1)指定新分區使用文件組:
ALTER PARTITION SCHEME partitionSchemaName
NEXT USED fileGroupName;
2)修改邊界值:
ALTER PARTITION FUNCTION partitionFunctionName ()
SPLIT RANGE (rangeValue)
10. 可以對兩個相鄰的分區進行合並,如果兩個分區都不為空,那么合並可能耗費大量時間和資源。
12. 在內存低於16GB的服務器上,不推薦使用超過1000的分區
13. 在分區表上創建非聚集非對齊索引時,會同時對所有分區上創建排序表,因此需要使用大量內存,當內存不足時,創建失敗。
14. 在分區表上創建非聚集對齊索引時,會依次在每個分區上創建排序表,由於創建排序表過程是串行執行,因此不會使用大量內存從而使性能下降。
15. 當內存有壓力時,如需要在分區數較大的分區表上建立非聚集非對齊索引時,可修改最大並行度為較小值來降低創建索引的內存使用。
16. 在使用分區表時,應該檢查和修改分區表的鎖升級
--==================================== --查看表的鎖升級設置 SELECT TB.name AS TableName, TB.[lock_escalation], TB.[lock_escalation_desc] FROM sys.tables TB WHERE TB.name='TB1' --================================== --將表的鎖升級設置為AUTO ALTER TABLE [dbo].[TB1] SET (LOCK_ESCALATION = AUTO )
優點:
1. 分區可以使得單個分區表或分區索引中數據大大減少,從而提高查詢和索引重建和整理的速度。
2. 將數據合理分散到多個分區后,可以有效解決數據熱點問題。
3. 表分區和索引分區使用同一個分區函數時,可以快速地換出和換出某個分區的數據,在清理歷史數據時很有效。
4. 當有多組磁盤時,可以使用分區將磁盤壓力分散到多組磁盤上,來提高磁盤使用率。
缺點:
1. 當查詢需要跨越多個分區時,可能會造成邏輯讀取較高,對多個分區數據合並可能會導致CPU過高(SORT MERGE OR HASH MERGE)
2. 在分區表上建立唯一索引時,如唯一索引也使用相同分區函數,則有利於將數據按區遷出和遷入,但唯一索引必須附帶分區鍵,會影響對整表求MAX/MIN等操作的效率