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