2

SQLServerのxml列をクエリしようとしています。列にプライマリインデックスを作成し、次を使用してクエリを実行しました。

SELECT *
FROM MyTable
where  Doc.exist('/xml/root/propertyx/text()[. = "something"]') = 1

60 000エントリのテーブルでは、このクエリはローカル開発マシンで約100ミリ秒かかります。クエリのパフォーマンスを向上させるために、これを何らかの方法で最適化することは可能ですか?

4

2 に答える 2

1

計算列を使用して、クエリ時間を短縮するために最適化できます。計算列はXML関数を直接使用できないため、関数でラップする必要があります。

go
create function dbo.GetSomethingExists(
    @Doc xml)
returns bit
with schemabinding
as begin return (
     select  @Doc.exist('/xml/root/property/text()[. = "something"]')
) end
go
create table TestTable (
    Doc xml,
    SomethingExists as dbo.GetSomethingExists(Doc) persisted
)
go

を使用して関数を宣言するとschemabinding、SomethingExistsにインデックスを作成できます。

create index IX_TestTable_SomethingExists on TestTable(SomethingExists)

これにより、クエリがはるかに高速になります。

于 2011-02-26T09:36:29.233 に答える
0

タイプのセカンダリXMLインデックスを作成すると、Path処理速度が上がる可能性があります。

于 2011-02-26T22:42:23.573 に答える