XML タイプ列で郵便番号を検索する必要があります。テーブルにプライマリ XML インデックスを作成しました。
この記事に従って、概念を理解しています。
私のクエリは次のようになります
select *some fields* from table_name where
[xml_column].exist(''/Session/Entries/Entry[@DataItemId="Address.Postcode" and contains(upper-case(.), "@Postcode")]'') = 1
@Postcode は入力パラメーターであり、ユーザーは郵便番号の全部または一部を入力できます
今、リンクによると、
ワークロードが XML 列でパス式を大幅に使用する場合、PATH セカンダリ XML インデックスはワークロードを高速化する可能性があります。最も一般的なケースは、Transact-SQL の WHERE 句で XML 列に対して exist() メソッドを使用する場合です。
しかし、次のステートメントと少し混乱します
ワークロードがパス式を使用して個々の XML インスタンスから複数の値を取得する場合、PROPERTY インデックス内の各 XML インスタンス内のパスをクラスター化すると役立つ場合があります。通常、このシナリオは、オブジェクトのプロパティがフェッチされ、その主キーの値がわかっている場合に、プロパティ バッグのシナリオで発生します。
exist()句でメソッドを使用してwhereいますが、複数のレコードを返しています。
クエリに従ってどのセカンダリ インデックスを作成すればよいか混乱しています。私はPROPERTY指数に傾倒しています。
3つすべてを作成して、どれを選択するかをSQLに処理させることはできますか?? これにより、ノード テーブルのサイズが増加し、データベースの速度が低下しますか??
私のXMLの一部は次のようになります
<Session>
<Entries>
<Entry DataItemId="AccountNumber" Type="Pattern" Source="SessionStore">
<Value>212312311</Value>
</Entry>
<Entry DataItemId="SortCode" Type="Pattern" Source="SessionStore">
<Value>10-20-30</Value>
</Entry>
<Entry DataItemId="AccountName" Type="Free" Source="SessionStore">
<Value>XXXXXXXXX</Value>
</Entry>
<Entry DataItemId="Let" Type="Set" Source="SessionStore">
<Value>LET</Value>
</Entry>
<Entry DataItemId="Relative" Type="Boolean" Source="SessionStore">
<Value>False</Value>
</Entry>
<Entry DataItemId="LtdCompany" Type="Boolean" Source="SessionStore">
<Value>False</Value>
</Entry>
<Entry DataItemId="Address.Postcode" Type="Pattern" Source="SessionStore">
<Value>GL8 1TT</Value>
</Entry>
<Entry DataItemId="Address.Line1" Type="Free" Source="SessionStore">
<Value>Askdaskdaoiksd</Value>
</Entry>
<Entry DataItemId="Address.Line2" Type="Free" Source="SessionStore">
<Value>Ojasuiodjaisjdsa</Value>
</Entry>
<Entry DataItemId="PropertyType" Type="Set" Source="SessionStore">
<Value>DH</Value>
</Entry>
<Entry DataItemId="Tenure" Type="Set" Source="SessionStore">
<Value>1</Value>
</Entry>
<Entry DataItemId="BuiltThisYear" Type="Boolean" Source="SessionStore">
<Value>False</Value>
</Entry>
<Entry DataItemId="YearBuilt" Type="Integer" Source="SessionStore">
<Value>1960</Value>
</Entry>
<Entry DataItemId="StdConstruction" Type="Boolean" Source="SessionStore">
</Entries>
</Session>
アップデート
さらに掘り下げた後、DBA の先輩の友人と話をしたところ、PATH インデックスを作成するように勧められました。クエリは以前よりも速く機能しているようです。