Я выполняю некоторые грубые тесты с типом данных 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запустить.
Я использую нетипизированный XML, и мой тест проводится на экземпляре SQL Server 2008 Express.В наборе данных содержится около 15 000 строк, а каждая строка XML имеет длину около 25 строк.
Эти результаты я получаю правильно?Если так, то почему все используют .exist
?Я делаю что-то не так, и .exist
может быть быстрее?