2017-06-19 4 views
1

数日前に、SQL Serverプロファイラを置き換える拡張イベントを試しました。 次に、sqlを使用してSQL Serverデータベースで生成されたxelファイルを配置したかったのです。XMLで値を取得するには、クロス・アプライを使用するのはなぜですか?

クロスオーケートで関数ノードを使用するサイトが多いため、XMLを使用しないよりも遅い場合でもXMLの値を取得できます。 何か不足しているかどうか分かりませんか?私のクエリの

サンプル要するに enter image description here

答えて

3

:あなたはチェーンソーでパンを切ることができるか、結果があっても(説得されていない場合は、いくつかの裸線を使用する場合がありますが、ツールを責めることはありませんそれは

...)非常に高速:-Dだあなた必要.nodes()派生テーブルとしてそれらを取得するために1:n関連のサブノードがある場合。 XPathが成長するとき

多くの人が

あなたがから名付けられ現在のノードを取得...いくつかの大きさに、特に非常に深くネストされた要素を、単にコードにもう少し読みやすさを得るために.nodes()を使用しますXPath navigationまたはXQueryに進むことができます。複数のネストされたXMLを使用すると、.nodes()のカスケードを使用して深く深く潜んで実行できます。

あなたは値NTCanonicalUserNameを持つ属性@Name.nodes()ための必要はありませんで名前<data>一つだけの要素<event>以下が存在することを確認してくださいすることができます。 Assumeably最速は

/event[1]/data[@name="NTCanonicalUserName"][1]/value[1]/text()[1] 

重要のようなものを使用することです!
与えられた属性を持つ<event>または複数の<data>が存在する可能性がある場合、「高速」コールは見つかったときに最初の出現を返します。これは、そこに意志エンジンが知っているので、

あなたの「速い」コールは、事前で、速いです...あなたは別のものがあることを、を見つけることはない間違ったものも...そしてかもしれません正確に1つの結果になります。 .nodes()を使用すると、eningeはさらに発生する必要があり、派生テーブルの構造を作成するためのオーバーヘッドを行います。グッド

一般的には、あなたが何か、エンジンが知ることはできませんが、より速く読みになるだろうを知っていれば、あなたはエンジンを助けるべき
に助言...

内部本当の
を知っています/ネイティブXMLデータ型
は、表示される文字列表現としてではなく、階層構造のツリーとして格納されます。 XMLを扱うことは驚くほど速いです...あなたの場合、検索はツリーから目的の要素に直接ジャンプしています。

+0

ありがとうございます。 :) – MoonLightFlower

関連する問題