データパーティショニングで巨大DBも楽々管理:SQL Server 2005を使いこなそう(11)(2/3 ページ)
5年ぶりのメジャーバージョンアップとなったSQL Server 2005。本連載では、SQL Server 2005への移行を検討しているデータベース管理者に向け、新規に実装されたさまざまな機能の詳細を紹介していく。(編集局)
データパーティショニングの実装
それでは、構築手順が分かったところで、実際にデータパーティショニングを実装してみましょう。今回の実装では、次のような簡単な売り上げテーブルを分割してみることにしました。テーブルは表1のような定義です。
列名 | 型 | 分割列 |
---|---|---|
SALES_NO | numeric(10,0) | |
SALES_DATE | datetime | ○ |
CUST_NAME | varchar(100) | |
SALES_AMOUNT | numeric(10,0) | |
表1 売り上げテーブル(テーブル名:SALES) |
パーティション関数の作成
上記テーブルを作成する前に、まずパーティション関数を作成します。今回はSALES_DATE列を分割列に指定し、分割期間を1カ月ごととします。
CREATE PARTITION FUNCTION testPF (datetime) AS RANGE RIGHT FOR VALUES ( '2005/2/1','2005/3/1','2005/4/1','2005/5/1','2005/6/1', '2005/7/1','2005/8/1','2005/9/1','2005/10/1','2005/11/1', '2005/12/1','2006/1/1');
リスト1のクエリの場合、表2のような分割ルールとなります。RANGE句の指定により、値範囲が異なります。
RANGE LEFTを指定した場合 | ||||
---|---|---|---|---|
パーティション | 1 | 2 | … | 13 |
値 | col <= 2005/2/1 | col > 2005/2/1 AND col <= 2005/3/1 |
… | col > 2006/1/1 |
RANGE RIGHTを指定した場合 | ||||
---|---|---|---|---|
パーティション | 1 | 2 | … | 13 |
値 | col < 2005/2/1 | col >= 2005/2/1 AND col < 2005/3/1 |
… | col >= 2006/1/1 |
表2 パーティション関数による分割 |
パーティション構成の作成
続いて、パーティション構成を作成します。パーティション関数で指定された13個のパーティションに対し、ファイルグループを割り当てます。いくつかのパーティションで同じファイルグループを指定したり、すべてのパーティションを同じファイルグループに指定することも可能です。
パーティション構成を作成するコードはリスト2のような形です。今回は3個のファイルグループを利用することにしました。
CREATE PARTITION SCHEME testPS AS PARTITION testPF --パーティション関数の指定 TO (FG1,FG1,FG1,FG1,FG2,FG2,FG2,FG2,FG3,FG3,FG3,FG3,FG3);
パーティション関数で指定されたパーティション数とファイルグループ数が一致しない場合、エラーとなります。
テーブルの作成
ここまでの流れでパーティショニングを行う準備が整ったので、後は実際のテーブルを作成するだけです。テーブルの作成時は、利用するパーティション構成と分割列を指定します。
CREATE TABLE [dbo].[SALES] ( [SALES_NO] [numeric](10, 0) IDENTITY (1, 1) NOT NULL , [SALES_DATE] [datetime] NULL , [CUST_NAME] [varchar] (100) COLLATE Japanese_CI_AS NULL , [SALES_AMOUNT] [numeric](10, 0) NULL ) ON testPS(SALES_DATE); --パーティション構成と分割列の指定
以上でデータパーティショニングの構築が完了しました。このテーブルにデータを登録すると、パーティション関数で指定された値範囲に従って、それぞれのファイルグループへデータが保存されます。今回は試験用に、2005年のデータ約100万件を登録しました。それぞれのパーティションには約8万件が登録されています。
Copyright © ITmedia, Inc. All Rights Reserved.