1

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 インデックスを作成するように勧められました。クエリは以前よりも速く機能しているようです。

4

0 に答える 0