一、表分區文章索引
SQL Server 動(dòng)態(tài)生成分區腳本
SQL Server 2005 自動(dòng)化刪除表分區設計方案
二、目的
這段時(shí)間,在SQL Server的生產(chǎn)環(huán)境中嘗試了不同方式的表分區,積累了一些這方面的經(jīng)驗,這里就表分區的一些注意事項做些記錄。
三、注意事項
1. 表分區的邊界值問(wèn)題,在使用Left和Right的時(shí)候需要注意,特別是在時(shí)間分割上需要特別注意,通常情況下,以00:00:00.000是最可靠的,這種分割就需要使用到Right,如果是Left的話(huà)就需要設置為23:59:59.997;更多信息請參考:SQL Server 合并(刪除)分區解惑
2. 對于分區值的第一個(gè)值,符合這個(gè)值之前的數值都會(huì )給分配到第一個(gè)分區中,而使用Left和Right的區別就是這個(gè)分區值會(huì )被分配到第一個(gè)分區還是第二個(gè)分區而已;
3. 在SQL Server 2005 中的分區表和索引也提到在時(shí)間分區上的例子,RANGE RIGHT FOR VALUES ('20001001 00:00:00.000', '20010101 00:00:00.000', '20010401 00:00:00.000', '20010701 00:00:00.000'),更加簡(jiǎn)便的形式就是RANGE RIGHT FOR VALUES ('20001001', '20010101', '20010401', '20010701'),完全撇開(kāi)了時(shí)分秒的問(wèn)題了。
4. 通常情況下,我們會(huì )以一個(gè)表Id(int),并且是自增作為分區字段,這樣分區的好處就是很容易區分歷史數據了(假如你的歷史數據是以插入到表的時(shí)間來(lái)區別的話(huà)),而且對分區的操作隔離也是最明顯的。這里有一個(gè)模板就是針對Id為例子的范文:SQL Server 2005 分區模板與實(shí)例
5. 當以Id作為分區函數值并不能滿(mǎn)足你的需求的時(shí)候,你可能需要考慮不一樣的東西了,因為在創(chuàng )建Id為主鍵的時(shí)候,默認的情況下就是為這個(gè)主鍵創(chuàng )建為聚集索引的,所以以Id為分區字段的話(huà),Id自增,就會(huì )順序的被放到遞增的分區文件中。這里假如你想以分類(lèi)標識ClassId作為分區的話(huà),那么你有幾種選擇,一個(gè)就是把Id+ClassId作為非聚集的主鍵(PRIMARY KEY NONCLUSTERED),創(chuàng )建ClassId為聚集索引(CLUSTERED),這樣就可以以ClassId作為分區字段了;另外一個(gè)選擇就是:Id+ClassId作為聚集的主鍵(PRIMARY KEY CLUSTERED),這樣就不用另外創(chuàng )建一個(gè)索引了??梢詤⒖嘉墨I:已分區索引的特殊指導原則
6. 對聚集索引進(jìn)行分區時(shí),聚集鍵必須包含分區依據列。對非唯一的聚集索引進(jìn)行分區時(shí),如果未在聚集鍵中明確指定分區依據列,默認情況下 SQL Server 將在聚集索引鍵列表中添加分區依據列。如果聚集索引是唯一的,則必須明確指定聚集索引鍵包含分區依據列。對唯一的非聚集索引進(jìn)行分區時(shí),索引鍵必須包含分區依據列。對非唯一的非聚集索引進(jìn)行分區時(shí),默認情況下 SQL Server 將分區依據列添加為索引的非鍵(包含性)列,以確保索引與基表對齊。如果索引中已經(jīng)存在分區依據列,SQL Server 將不會(huì )向索引中添加分區依據列。可以參考文獻:已分區索引的特殊指導原則(要理解上面的描述,需要一點(diǎn)功底)
7. 如果你需要在你的分區上創(chuàng )建全文索引,那么你創(chuàng )建分區的時(shí)候就需要注意了,因為全文索引需要唯一索引的支持,而且這個(gè)唯一索引不能是復合索引,只能是單個(gè)字段的唯一索引。這個(gè)索引的要求:“unique, single-column, non-nullable index”。
8. 如果我們的分區值是隨著(zhù)時(shí)間的變化而增加的話(huà),那么我們在設置表分區之后,系統跑了一段時(shí)間之后,那么最后一個(gè)分區占用的空間就會(huì )越來(lái)越大,除非你在創(chuàng )建分區的時(shí)候已經(jīng)確認了這些分區值不會(huì )再增加了,在MSDN的文檔中:SQL Server 2005 中的分區表和索引,里面提到的月份表分區、地區分區這些固定分區值,這并沒(méi)有很好的表達在生產(chǎn)環(huán)境中所面臨的分區值在不斷增長(cháng)的問(wèn)題。所以這里就針對這個(gè)問(wèn)題做了一個(gè)Job,這個(gè)Job可以動(dòng)態(tài)、自動(dòng)化的完成刪除分區(交換分區),修改分區函數、分區方案等操作。進(jìn)入閱讀:SQL Server 2005 自動(dòng)化刪除表分區設計方案
9. 在MSDN自動(dòng)化分區的前驅?zhuān)?/span>SQL2005PartitioningScripts.exe,里面有些是值得參考的,但是開(kāi)發(fā)一個(gè)適合自己業(yè)務(wù)需求的自動(dòng)化分區也是必要的,有興趣的可以閱讀:SQL Server 動(dòng)態(tài)生成分區腳本,這里主要解決了創(chuàng )建表分區過(guò)程中反復修改文件組、文件的名稱(chēng)設置的問(wèn)題。
四、參考文獻
聯(lián)系客服