私はSQLServer2008のxmlデータ型を使用していくつかの大まかなベンチマークを行っています。句.exist
で使用されている場所をたくさん見てきました。where
最近、2つのクエリを比較したところ、奇妙な結果が得られました。
select count(testxmlrid) from testxml
where Attributes.exist('(form/fields/field)[@id="1"]')=1
このクエリの実行には約1.5秒かかり、主キー(testxmlrid)以外のインデックスはありません。
select count(testxmlrid) from testxml
where Attributes.value('(/form/fields/field/@id)[1]','integer')=1
一方、このクエリの実行には約.75秒かかります。
型指定されていないXMLを使用しており、ベンチマークはSQL Server2008Expressインスタンスで行われています。データセットには約15,000行あり、各XML文字列の長さは約25行です。
これらの結果は正しいですか?もしそうなら、なぜ誰もが使用するの.exist
ですか?私は何か間違ったことをしていて、.exist
もっと速くなる可能性がありますか?