我正在使用 SQL Server 2008 的 xml 数据类型进行一些粗略的基准测试。我已经看到了许多在子句.exist
中使用的地方。where
不过,我最近比较了两个查询并得到了奇怪的结果。
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
另一方面,此查询大约需要 0.75 秒才能运行。
我正在使用非类型化 XML,并且我的基准测试是在 SQL Server 2008 Express 实例上进行的。数据集中大约有 15,000 行,每个 XML 字符串大约 25 行长。
我得到的这些结果正确吗?如果是这样,为什么每个人都使用.exist
? 我做错了什么并且.exist
可以更快吗?