SQL Server 合併(刪除)分割槽解惑
一、準備
在SQL Server 2005版本之後就有了表分割槽的概念與應用,在分割槽操作裡面有一個叫做合併分割槽的功能,也被稱為刪除分割槽。分割槽所處的檔案組和檔案是不會被刪除的,只會對資料進行轉移合併。合併分割槽時需要注意所帶來的IO問題。
合併分割槽常見情景:發現某個分割槽的資料很少,為了方便管理可以考慮合併分割槽。需要進行統計、四則運算的時候也可以考慮合併分割槽,這種情形下並沒有對比合並與分割槽之間的效能,如果某位童鞋有興趣和環境的話可以提供這方面的資料。
檢視分割槽方案的方式:在SQL Server Management Studio中,選擇資料庫-->儲存-->分割槽方案,右擊分割槽方案名,在彈出的選單中選擇“編寫分割槽方案指令碼為”-->CREATE
二、測試
(一)環境:使用RANGE RIGHT作為分割槽函式的關鍵字,它表示這個值開始是屬於右邊界的。
RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')
檔案組 |
分割槽 |
取值範圍 |
[FG1] |
1 |
[過去某年, 2010/01/01) |
[FG2] |
2 |
[2010/01/01, 2011/01/01) |
[FG3] |
3 |
[2011/01/01, 2012/01/01) |
[FG4] |
4 |
[2012/01/01, 2013/01/01) |
[PRIMARY] |
5 |
[2013/01/01,未來某年) |
1.測試一:刪除分割槽函式的第一個值
當使用MERGE RANGE ('20100101'),合併後分區就相當於:
RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')
檔案組 |
分割槽 |
取值範圍 |
[FG?] |
1 |
[過去某年, 2011/01/01) |
[FG3] |
2 |
[2011/01/01, 2012/01/01) |
[FG4] |
3 |
[2012/01/01, 2013/01/01) |
[PRIMARY] |
4 |
[2013/01/01,未來某年) |
問題:是[FG1]合併到[FG2],還是[FG2]合併到[FG1]呢?
測試結果:[FG2]合併到[FG1]
2.測試二:刪除分割槽函式的第二個值
當使用MERGE RANGE ('20110101'),合併後分區就相當於:
RANGE RIGHT FOR VALUES ('20100101','20120101','20130101')
檔案組 |
分割槽 |
取值範圍 |
[FG1] |
1 |
[過去某年, 2010/01/01) |
[FG?] |
2 |
[2010/01/01, 2012/01/01) |
[FG4] |
3 |
[2012/01/01, 2013/01/01) |
[PRIMARY] |
4 |
[2013/01/01,未來某年) |
問題:是[FG2]合併到[FG3],還是[FG3]合併到[FG2]呢?
測試結果:[FG3]合併到[FG2]
3.測試三:刪除分割槽函式的最後一個值
當使用MERGE RANGE ('20130101'),合併後分區就相當於:
RANGE RIGHT FOR VALUES ('20100101','20110101','20120101')
檔案組 |
分割槽 |
取值範圍 |
[FG1] |
1 |
[過去某年, 2010/01/01) |
[FG2] |
2 |
[2010/01/01, 2011/01/01) |
[FG3] |
3 |
[2011/01/01, 2012/01/01) |
[?] |
4 |
[2012/01/01,未來某年) |
問題:是[FG4]合併到[PRIMARY],還是[PRIMARY]合併到[FG4]呢?
測試結果:[PRIMARY]合併到[FG4]
(二)環境:使用RANGE LEFT作為分割槽函式的關鍵字,它表示這個值開始是屬於左邊界的。
RANGE LEFT FOR VALUES ('20100101',<