2016-05-03 2 views
0

約10万行で、私は、次のような構造を持つ単純なテーブルを持っている:XMLインデックスが遅くなるダウンクエリ

CREATE TABLE [dbo].[DataPoints](
    [ID] [bigint] IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    [ModuleID] [uniqueidentifier] NOT NULL, 
    [DateAndTime] [datetime] NOT NULL, 
    [Username] [nvarchar](100) NULL, 
    [Payload] [xml] NULL 
) 

ペイロードは、すべての行に対して次のようになります。

<payload> 
    <total>1000000</total> 
    <free>300000</free> 
</payload> 

次の二つクエリは、Payload列にインデックスを作成する前に、私の開発マシンで実行するためにそれぞれ約11秒かかっています。

問題は、Payload列にXMLインデックスを作成すると、両方のクエリが完了するまでに時間がかかります!私は知りたい:

1)これはなぜ起こっているのですか? XMLインデックスがクエリをスピードアップするとは思わないか、少なくともWHERE句でXML列の値が使用されるクエリですか?

2)私の場合に適していない場合、XMLインデックスを使用するための適切なシナリオは何でしょうか?

この

は、SQL Server上で2014年

+0

を作成することができますか?プライマリXMLインデックスのみ、または選択XMLインデックス? https://msdn.microsoft.com/en-us/library/jj670108(v=sql.120).aspx "通常のXMLインデックスの主な制限は、XMLドキュメント全体をインデックス化することです。これはいくつかの重大な欠点につながりますが、クエリパフォーマンスの低下やインデックスメンテナンスコストの増加など、インデックスのストレージコストに関連しています。 – Dijkgraaf

+0

通常のXMLインデックスのみです。 –

+1

これまで、XMLインデックスと奇妙なパフォーマンスに関する質問がありました。http://dba.stackexchange.com/q/130969/70663 XMLを実際にクエリしない限り、XMLインデックスを使用しないでください** XML索引の処理速度が向上します。これをより頻繁に必要とする場合は、データを「通常の」索引付けされた表に読み込むことになります。 – Shnugo

答えて

0

XMLペイロードの通常のXMLインデックスのインデックスのすべてが

Selective XML Indexes (SXI)

通常のXMLインデックスの主な制限は、彼らのインデックスXML文書全体。これは、問合せパフォーマンスの低下やインデックス保守コストの増加など、インデックスのストレージコストに関連する重大な欠点につながります。

パフォーマンスを向上させるために、選択的XMLインデックスを作成することをお勧めします。

他のオプションでは、セカンダリXMLインデックスを作成することができ、検索パフォーマンスを向上させるために2次索引

XML Indexes (SQL Server)

を作成することです。セカンダリインデックスを作成するには、まずプライマリXMLインデックスが存在する必要があります。

だから、プライマリインデックスの目的は、そう、あなたが使用しているXMLインデックスのどのようなタイプの二次インデックス

+0

通常のXMLの "インデックス"は何のために便利ですか?なぜクエリが遅くなっていますか? –

+0

XMLインデックス – Dijkgraaf

+1

こんにちは@Dijkgraafが必要な理由で更新されました。これは次のように読んでください。http://dba.stackexchange.com/q/130969/70663 – Shnugo

関連する問題