4

データベースに XML データ列を持つテーブルがあります。

その列には、多数のアプリケーション値が格納されている xml データの大きなチャンクがあります。

定期的に呼び出されるクエリの 1 つでは、同じクエリでこの Xml 列から複数の値が取得されます。例えば

SELECT 
    v.OtherColumns --...
    ,v.[Data].value('(/Record//Inputs/Net)[1]', 'money') as 'Input Net'
    ,v.[Data].value('(/Record//Inputs/Vat)[1]', 'money') as 'Input Vat'
    ,v.[Data].value('(/Record//Inputs/Gross)[1]', 'money') as 'Input Gross'
    ,v.[Data].value('(/Record//Outputs/Net)[1]', 'money') as 'Output Net'
    ,v.[Data].value('(/Record//Outputs/Vat)[1]', 'money') as 'Output Vat'
    ,v.[Data].value('(/Record//Outputs/Gross)[1]', 'money') as 'Output Gross'
From 
    Validations as v
    --... remainder of query

私には、この列からデータを 6 回読み取り、6 回解析する必要があるように見えます。Sql Azure ポータルでクエリ プランを見ると、これがクエリで群を抜いて最大のヒットです...

クエリ プラン

完全なクエリでは、同じ列に対して最大 20 個の XPath クエリがあり、それぞれがクエリの最大 4.7% を占めています。

この列全体をサブクエリで一度取得し、列のメモリ内コンテンツに対して XPath クエリを実行するより最適な方法はありますか?

4

1 に答える 1

2

XQuery ステートメント FLWOR を使用してみてください。解析時間を短縮する必要があります。http://msdn.microsoft.com/en-us/library/ms190945.aspxを参照してください。

于 2013-07-08T15:21:03.847 に答える