Что быстрее .exist или .value в предложении where?

Я провожу грубые тесты с типом данных xml SQL Server 2008. Я видел много мест, где .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 секунды.

Я ' m с использованием нетипизированного XML, и мое тестирование проводится на экземпляре SQL Server 2008 Express. В наборе данных около 15 000 строк, и каждая строка XML составляет около 25 строк.

Я получаю правильные результаты? Если да, то почему все используют .exist ? Я что-то делаю не так, и .exist может быть быстрее?

6
задан Mikael Eriksson 27 May 2011 в 15:37
поделиться