51341


SQL Serverでプライマリキーがあるテーブルを別のキーでパーティション分割したいと考えております。

SQL Management
Studioでスプリプトを以下のようにして実行すると、以下のメッセージが表示されてしまいますが、データを登録するとちゃんとパーティション番号別にデータが格納されます。下記のcreate文でどこかおかしい箇所がありますでしょうか？  
また、テーブルがパーティション構成で作成されたことはどのように確認すればよいでしょうか？

**メッセージ**

[code]

    「クラスター化インデックス 'PK_A_ID' に指定された ファイル グループ 'FILE_GROUP' がテーブル 'dbo.TEST' に使用されましたが、
    パーティション構成 'PART_TEST' がそのインデックスに指定されています。」
    
[/code]

**スクリプト**

[code]

    CREATE PARTITION FUNCTION [PART_TEST](varchar(6))
    AS RANGE LEFT FOR VALUES (
        N'201811',
        N'201812'
        )
    GO
    
    CREATE PARTITION SCHEME [PART_TEST]
    AS PARTITION [PART_TEST]TO (
        [FILE_GROUP],
        [FILE_GROUP],
        [FILE_GROUP],
        )
    GO
    
    CREATE TABLE [dbo].[TEST](
        [A_ID]  [varchar](12)   NOT NULL,
        [B_ID]  [varchar](20)   NOT NULL,
        [CREATE_MONTH]  [varchar](6)    NULL,   
        [SPACE1]    [datetime]  NULL
     CONSTRAINT [PK_A_ID] PRIMARY KEY CLUSTERED 
    (
        [A_ID]  ASC,
        [B_ID]  ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
    ) ON [FILE_GROUP],
    ) ON [PART_TEST](CREATE_MONTH)
    GO
    
[/code]


CC BY-SA 4.0
2018-12-18T08:47:52.527
51330
2018-12-18T22:46:19.887
2018-12-18T22:46:19.887
4236
9228
question
sql-server
SQL Server 2016　プライマリキーがあるパーティションテーブルの作成方法


パーティションテーブルを検討する前に、クラスター化インデックスの概念を理解する必要があります。

インデックスの一般的な概念はテーブルの該当行に対するポインター配列的な存在となっています。SQL
Serverにおいても非クラスター化インデックスは同じです。  
しかしクラスター化インデックスは全く異なり、テーブルそのものをクラスター化インデックス順に並べて配置する機能です。名前こそインデックスとなっていますが実体はテーブルの格納方法そのものです。そのため、テーブルに対してクラスター化インデックスは１つまでしか設定できません。その代わりにクラスター化インデックスを使用した検索の際にはインデックスに含まれていないカラムに対してもパフォーマンス低下することなく参照できる利点があります。  
幸い、一般的なテーブルには主キーが存在するため、クラスター化インデックスの候補として主キーが適切です。

さて、パーティションテーブルももちろんテーブルの格納方法に関するものです。クラスター化インデックスが存在する場合はクラスター化インデックスを元に分割する必要があるのは明らかです。  
どうしてもパーティションテーブルを他のインデックスを元に分割するのであれば、クラスター化インデックスを削除し非クラスター化インデックスに変更する必要があります。

ただし、前述の説明の通り、クラスター化インデックスと非クラスター化インデックスでは構造が全く異なるため、パフォーマンスの出方も全く異なってきます。パーティションテーブルのためにパフォーマンスが低下しては本末転倒ですので、インデックスを正しく理解した上で、テーブル・インデックスを設計してください。


CC BY-SA 4.0
2018-12-18T22:46:10.380
51341
2018-12-18T22:46:10.380
4236
51330
answer