【发布时间】:2011-05-26 22:58:57
【问题描述】:
我正在使用 SQL Server 2008 的 xml 数据类型进行一些粗略的基准测试。我看到很多地方在where 子句中使用了.exist。不过,我最近比较了两个查询并得到了奇怪的结果。
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 可能会更快?
【问题讨论】:
标签: sql-server performance xpath xquery-sql