2017-10-19 33 views
1

MS SQL Serverで格納場所を指定する方法はありますか?SQL ServerでXmlインデックスの格納場所を指定する

私はxmls(最大2GBのデータ)とこのテーブルのプライマリおよびセカンダリXMLインデックスを持つ比較的小さなテーブルを持っています。これらの索引は、基礎となる表よりも時間がかかります。 テーブルとインデックスを物理的に2つの別々のパーティションに分割する方法はありますか?

私は、MSDNで任意のスーハnオプション(https://docs.microsoft.com/en-us/sql/t-sql/statements/create-xml-index-transact-sql)が表示されない:

CREATE [ PRIMARY ] XML INDEX index_name 
    ON <object> (xml_column_name) 
    [ USING XML INDEX xml_index_name 
     [ FOR { VALUE | PATH | PROPERTY } ] ] 
    [ WITH (<xml_index_option> [ ,...n ]) ] 
[ ; ] 

をしかし、私はいくつかのトリックがある願っています。 Creating XML Indexesから

+0

テーブルとインデックスは、常に別個です。つまり、それらが異なるファイルグループに格納されているわけではありません。なぜ質問するのですか?パフォーマンスに問題はありますか?または、単に何が起こるのだろうか? –

+0

@Panagiotis - はい、私は既存の問題のために求めています。私たちの製品。 xmlクエリは遅かった。これは、最も重要なxmlをssdおよびxmlのテーブルに移動してインデックスを作成することで解決された。テーブルのデータはかなり遅いですが、xmlインデックスで取られた領域はxmlで取られた領域よりも何倍も大きく、ssdを埋めています – Jan

+0

その質問は理にかなっていません。クエリを高速化するのは* SSD *インデックスです。遅いディスクで移動すると、クエリが遅くなります。また、多くのクエリを実行する場合は、おそらくxml値を実際の列に置き換える必要があります。値はどのように見えるのですか? –

答えて

1

ファイルグループまたはユーザ・テーブルの分割情報は、XMLインデックスに 印加されます。ユーザーはXMLの インデックスでこれらを個別に指定することはできません。

私はそれを正しく理解している場合しかし、あなたはcreate table文のTEXTIMAGE_ON句を使用して別々のファイルグループにXML列とそれに基づくすべてのインデックスを移動することができるはずです。

create table dbo.MyTable (
    Id int not null, 
    XMLData xml not null 
) 
on [PRIMARY] 
textimage_on [LARGEDAT]; 

私がここに見る唯一の欠点は、テーブルのすべてのLOB型の列が、XMLだけでなく、そのファイルグループに配置されることです。

EDIT:

あなたはそれらの値は、テーブルのページを収まるほど小さくても、行のうち、LOBデータ型を強制的にsp_tableoptionlarge value types out of rowオプションを使用することができます。

+0

私は何とか見逃したドキュメントの一部を引用してくれてありがとう: - /。このシナリオではLOBは私たちのためのものではありません。小さなxmlがあります(そして、テキストイメージはあるサイズ以上のレコードにのみ適用されます - IIRC 8000バイト)。しかし、このような状況では、パーティション化は最善の選択肢のようです(最新のレコードを保持し、ssd上のインデックスであり、hddに残っています) – Jan

+0

XML値が小さい場合、XMLを使用する理由は?彼らには何が含まれていますか?余分な列を追加してみませんか? 「依然としてプライマリ」の場合は、あなたは 'ON [whatever]'で* different *ファイルグループを指定することができます。 –

+0

@Janあなたは正しいですが、これには回避策もあります。私の答えを更新しました。 –

関連する問題