データベースに 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 クエリを実行するより最適な方法はありますか?