2017-09-18 7 views
1

私は、MS SQLサーバーでサポートされているテーブル分割技術にはかなり新しいです。私は40万以上のレコードを持つ巨大なテーブルを持っており、このテーブルにテーブルの分割を適用したいと考えています。私がパーティション関数について知るほとんどの例は、Range(LEFT | RIGHT)の値としてパーティション関数を定義することですが、私が正確に必要とするのは、Oracle Webページから見つかった次の例のようなものです。MS SQLサーバはリストによるテーブル分割をサポートしていますか?

CREATE TABLE q1_sales_by_region 
     (..., 
     ..., 
     ..., 
     state varchar2(2)) 
    PARTITION BY LIST (state) 
     (PARTITION q1_northwest VALUES ('OR', 'WA'), 
     PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'), 
     PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'), 
     PARTITION q1_southeast VALUES ('FL', 'GA'), 
     PARTITION q1_northcentral VALUES ('SD', 'WI'), 
     PARTITION q1_southcentral VALUES ('OK', 'TX'));  
); 

の例では、我々は、CREATE TABLE文でLISTのPARTITION BY句を指定することができ、およびPARTITION句は、パーティションに含まれる行を修飾離散値のリストを指定することを示しています。

私の質問はMS SQLサーバーもリストによるパーティション分割をサポートしていますか?

答えて

0

これを達成するには、補助計算列を使用します。

alter table q1_sales_by_region add calc_field (case when q1_northwest in ('OR', 'WA') then 1...end) PERSISTED 

そしてこのcalc_fieldに、パーティションの標準的なレンジ・パーティション機能

を使用して: は LIST Partitioning in SQL Server

アイデアは、このようなあなたのリストに基づいて計算列を作成することです: ここでは、完全な例を見つけることができます

1

これはありません。 SQL Serverのパーティションテーブルは、範囲のパーティション分割のみをサポートします。

この場合、Partitioned Viewを使用することをお勧めします。

ありビューをパーティションに適用restrictionsの数(リンクアンカーから少しスクロールダウン)があるが、ここで重要なのは、パーティショニングを取ることができCHECK<col> IN (value_list)ある基礎となるテーブル内のCHECK制約と一つの形に基づいていることです。

ただし、パーティション化されたビューを設定することは、パーティション化されたテーブルを作成するよりもはるかに「手動」です。ビューのデータの一部を保持する各テーブルは個別に明示的に作成する必要があります。

0

パーティション化で何を達成しようとしていますか? 20年前の40万行は巨大でしたが、今日は普通です。パーティション化は、パーティション化列が一番左側のクラスタ化インデックスキー列でなく、クエリ処理中にパーティションを削除できる場合に、大規模スキャンのパフォーマンスを向上させることができますが、大きなテーブルのパフォーマンスにとっては特に重要です。

異なるファイルグループの物理的な配置を管理しやすくするため、領域ごとにファイルグループを使用して範囲パーティションを使用できます。

ALTER TABLE q1_sales_by_region 
    ADD CONSTRAINT ck_q1_sales_by_region_state 
    CHECK (state IN('OR', 'WA', 'AZ', 'UT', 'NM','NY', 'VM', 'NJ','FL', 'GA','SD', 'WI','OK', 'TX')); 
:たとえば:あなたは既に唯一の有効な状態値を強制するために、関連するテーブルを持っていない場合

CREATE TABLE q1_sales_by_region 
     (
     -- 
     state char(2) 
    ); 

CREATE PARTITION FUNCTION PF_State(char(2)) AS RANGE RIGHT FOR VALUES(
     'AZ' 
    , 'FL' 
    , 'GA' 
    , 'NJ' 
    , 'NM' 
    , 'NY' 
    , 'OK' 
    , 'OR' 
    , 'SD' 
    , 'TX' 
    , 'UT' 
    , 'VM' 
    , 'WA' 
    , 'WI' 
);  
CREATE PARTITION SCHEME PS_State AS PARTITION PF_State TO(
     [PRIMARY]  --unused 
    , q1_southwest --'AZ' 
    , q1_southeast --'FL' 
    , q1_southeast --'GA' 
    , q1_northeast --'NJ' 
    , q1_southwest --'NM' 
    , q1_northeast --'NY' 
    , q1_southcentral --'OK' 
    , q1_northwest --'OR' 
    , q1_northcentral --'SD' 
    , q1_southcentral --'TX' 
    , q1_southwest --'UT' 
    , q1_northeast --'VM' 
    , q1_northwest --'WA' 
    , q1_northcentral --'WI' 
); 

はまた、チェック制約を追加することができます

関連する問題