Я провожу грубые тесты с типом данных 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
может быть быстрее?