XMLファイル(db内)に格納されている情報を抽出する必要があるSQL-Serverデータベースがあります。
私はテーブルを持っています:mc_report
:original_xmlというnvarcharフィールドが含まれています
こんなことしたい
select id from mc_report where original_xml like '%mytext%';
テーブルに数百(または数千)のレコードが含まれる可能性があること、および各XMLファイルの長さが数百行であることを知っている
xmlファイルは次のようになります:http://pastebin.com/WQyvzngG
シリアルでフィルタリングしたい
ペーストビンの242行目
<entry name="serial" type="string">Z4MDPDAVT</entry>
速くなるのでしょうか?それとも永遠にかかるのでしょうか?
速くない場合、私が持っている他のオプションは何ですか?
これをWHERE句に入れることができます:
WHERE YourXmlColumn.exist('//entry[@name="serial" and .="Z4MDPDAVT"]')=1
上位ノード(「sound_card」を調べるなど)がわかっている場合は、XQueryがフィッティングを見つけるまですべてのエントリをトラバースする必要がないため、時間を大幅に短縮できます。
検索条件を動的に配置する場合は、次のいずれかを使用できます。
DECLARE @prm AS VARCHAR(100)='Z4MDPDAVT';
[...]
WHERE YourXmlColumn.exist('//entry[@name="serial" and .=sql:variable("@prm")]')=1
または、次のように実行中のクエリの列のコンテンツを使用できます。
WHERE YourXmlColumn.exist('//entry[@name="serial" and .=sql:column("ColumnName")]')=1
本当にパフォーマンスの問題が発生した場合は、検索対象の値をインデックス付きの列に書き込むトリガーについて考えるかもしれません。
XMLインデックスについても考えるかもしれませんが、私はこれを避けようとします...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加