У меня есть файл XML, хранящийся в столбце XML
типа данных data
в моей таблице records
.Ошибка SQL-запроса на запрос производительности XML-типа данных
таблица выглядит следующим образом:
create table records
(
id int,
type nvarchar(28),
data xml,
posted datetime
)
XML данные:
<Properties>
<data>
<Name>novel</Name>
<Gender>Female</Gender>
<Age>32</Age>
<Salary>55k</Salary>
<Phone>123-123</Phone>
</data>
</Properties>
Я в настоящее время используется следующий запрос для извлечения данных из этого столбца XML, который предпринимает более минут в 20K записей.
select
id,
posteddate,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Name)')) AS Name,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Gender)')) AS Gender,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Age)')) AS Age,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Salary)')) AS Salary,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Phone)')) AS Phone
from
records
where
type = 'personnel_xml'
Я очень новичок в извлечении XML в SQL Server. Я предполагаю, что не выполняю стандартный оптимизированный подход для извлечения элементов XML.
Итак, может ли кто-нибудь помочь, как я могу оптимизировать этот сценарий, поскольку мне нужно извлечь 100 таких элементов из моего xml, хранящихся в виде столбца.
http://stackoverflow.com/users/1570000/john-cappelletti my xml имеет один элемент данных, поэтому в этом случае я надеюсь, что мне не нужен крест. Итак, с точки зрения производительности, которую нужно выбрать, value() или query()? – Aarush
@JohnCappelleti, какова разница в производительности в 'хранении всего xml в таблице #temp и извлечении из #temp' OR ', непосредственно извлечении из table.column без использования #temp для моего сценария из 200 элементов без повторения атрибут – Aarush
@LearnByExample Правильно, так как у вас есть один элемент данных, крест не требуется. и поскольку вы знаете, что значение пути будет быстрее, чем запрос. –