程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 合並(刪除)分區詳解

SQL Server 合並(刪除)分區詳解

編輯:關於SqlServer

<!--[if !supportLists]-->一、<!--[endif]-->准備

在SQL Server 2005版本之後就有了表分區的概念與應用,在分區操作裡面有一個叫做合並分區的功能,也被稱為刪除分區。分區所處的文件組和文件是不會被刪除的,只會對數據進行轉移合並。合並分區時需要注意所帶來的IO問題。

合並分區常見情景:發現某個分區的數據很少,為了方便管理可以考慮合並分區。需要進行統計、四則運算的時候也可以考慮合並分區,這種情形下並沒有對比合並與分區之間的性能,如果某位童鞋有興趣和環境的話可以提供這方面的數據。

查看分區方案的方式:在SQL Server Management Studio中,選擇數據庫-->存儲-->分區方案,右擊分區方案名,在彈出的菜單中選擇“編寫分區方案腳本為”-->CREATE到-->新查詢編輯器窗口。

<!--[if !supportLists]-->二、<!--[endif]-->測試

<!--[if !supportLists]-->(一) <!--[endif]-->環境:使用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, 未來某年)

<!--[if !supportLists]-->1. <!--[endif]-->測試一:刪除分區函數的第一個值

當使用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]

<!--[if !supportLists]-->2. <!--[endif]-->測試二:刪除分區函數的第二個值

當使用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]

<!--[if !supportLists]-->3. <!--[endif]-->測試三:刪除分區函數的最後一個值

當使用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]

<!--[if !supportLists]-->(二) <!--[endif]-->環境:使用RANGE LEFT作為分區函數的關鍵字,它表示這個值開始是屬於左邊界的。

RANGE LEFT 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, 未來某年]

<!--[if !supportLists]-->1. <!--[endif]-->測試四:刪除分區函數的第一個值

當使用MERGE RANGE ('20100101'),合並後分區就相當於:

RANGE LEFT 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]呢?

測試結果:[FG1]合並到[FG2]

<!--[if !supportLists]-->2. <!--[endif]-->測試五:刪除分區函數的第二個值

當使用MERGE RANGE ('20110101'),合並後分區就相當於:

RANGE LEFT 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]呢?

測試結果:[FG2]合並到[FG3]

<!--[if !supportLists]-->3. <!--[endif]-->測試六:刪除分區函數的最後一個值

當使用MERGE RANGE ('20130101'),合並後分區就相當於:

RANGE LEFT 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]呢?

測試結果:[FG4]合並到[PRIMARY]

<!--[if !supportLists]-->三、<!--[endif]-->結論

下圖中形象的表述了邊界值(boundary_value)所處的分區,符號“()”表示不包含,“[]”表示包含,一個圓圈帶叉圖標表示需要刪除這個邊界值,當使用MERGE RANGE的時候,數據庫就需要刪除一個分區的數據,並把數據合並到另外一個分區中。你能從下圖看出結論嗎?


(圖1:分區函數為右邊界)


(圖2:分區函數為左邊界)

結論:刪除的這個邊界值(boundary_value)屬於哪個分區,那麼就會刪除這個分區,再向鄰近的分區合並。鄰近的意思是以這個邊界值為臨界點的兩個分區。圖1與圖2就很好的解釋了這個結論。

四、<!--[endif]-->參考文獻

實戰分區表:SQL Server 2k5&2k8系列(三)

SQL Server 2005中的分區表(四):刪除(合並)一個分區

合並分區

-------------------華麗分割線-------------------

作者:聽風吹雨 出處:http://gaizai.cnblogs.com/ 版權:本文版權歸作者和博客園共有 轉載:歡迎轉載,不過記得留下買路錢 Blog:http://gaizai.i170.com/ 格言:不喜歡是因為你不會 && 因為會所以喜歡
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved