實作資料表分割

當某個資料表中的資料快速累積到一定程度時,對這樣龐大的資料表進行查詢或新增、刪除等動作都會相當地費時。如果能將這個資料表分割成數個區塊來進行查詢及維護,對效能應該會有所幫助。

在SQL Server 2008以前要實作出資料表分割的概念的話,可能就是真的要建立數個不同名稱,但具有相同的資料表表網的資料表。並利用某個預先定義好的分割函式來將資料表中的內容加以分割,放置到個別的資料表中。

要查詢時,再利用View的方式JOIN成一個資料表檢視來進行查詢。或是在查詢前利用相同的資料分割函式決定出要查詢的區塊,再到那個區塊所對應的資料表中進行查詢。不過,這種方式都是需要使用者能明確地事先依資料分割函式來計算所要取用的資料區塊才行。

在SQL Server 2008版中,它真接內建了資料表分割的功能。只要您提供所需的資料表分割函式,以及資料表分割表綱(SCHEMA),就可以將資料表進行分割了。

要實作資料表分割的話,如果您一開始還沒有建好資料表,那當然可以先建好資料表分割函式、資料表分割表綱後再來建立資料表。不過,如果要針對既有的資料表進行資料表分割的話,應該也是有相對應的SQL指令可以來完成,但在SQL Server 2008的管理工具中已經有提供介面化的方式來讓您為即有的資料表進行資料表分割的設定。

以下說明如何利用SQL Server管理工具的介面來進行資料表分割。

首先找到您要進行分割的資料表,在這個資料表上按下右鍵,會出現一個選單,其中有一項是:儲存體。在儲存體中有個「建立資料分割」的功能,這個功能就是用來製作分割資料表的工具。


一開始會出現說明的畫面:


接著會出現這個資料表的所有欄位資訊,主要就是要選定一個欄位來作為資料表分割的依據。


選好欄位後,接下來就是要提供用來分割資料用的函式。這個函式可以新增,或是利用原本來已經產生好的函式也可以。


接著就是要指定所要使用的資料表分割表綱:


選好資料表分割表網後,會出現一個設定檔案群組的介面。在這個介面中是指定用所選的資料表分割表綱中每個分割區塊所要放置的檔案群組。檔案群組可以都放在同一個,或是都各自給一個不同的檔案群組。在此我採用的方式是將舊資料表放到一個新增的檔案群組中。而將目前會使用到的資料則維持在預設的PRIMARY檔案群組中。


一切都設定好後,最後就是決定要立即執行或是先產生對應的SQL指令了。當然最方便的方式就是立即執行囉‧


設定好後會到一個確認的畫面:


最後就是按下「完成」來進行套用囉。
基本上沒問題的話,到此就可以直接套用產生好分割的資料表了。只是我選到的這個資料表不知怎麼地,一執行後就出現如下的錯誤訊息:索引中不能使用重複的資料行名稱。資料行名稱XXX列出多次。


一開始看到這個錯誤訊息,還真的不知如何下手去修正。所以就拿這段錯誤訊息到網路上找了一下,結果也沒有找到相關的資訊。最後只好硬著頭皮自己試著解決看看了。最後想到說那不如就不要選「立即執行」,讓它先產生對應的SQL指令來看看好了。這一看,果然讓我看出了問題的所在。

在以下的這段SQL指令碼中,可以看到一開始它會先將這個資料表中原本的索引給移除,並試著加入原本的索引但會同時指定資料表分割表綱。可是不知怎麼地這段要重新加入索引的SQL指令竟然寫錯了,有些欄位重複地出現在這個索引中。造成每次執行都會得到上述的錯誤訊息。於是我就手動地將重複的欄位移除,再執行這段SQL指令。果然就成功了。



查詢是否有真正地完成分割的話,可以用如下的指令碼來查詢。


留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)