Это безумие, но производительность запросов примерно на 50% УЖЕ после того, как я добавляю первичный индекс XML в свое поле xml.
Вот что я делаю.
У меня есть таблица, содержащая поле XML ActivityStepLog (содержит LogData, XML)
Я создаю пример данных для вставки в эту таблицу, выполнив следующую команду:
INSERT INTO dbo.ActivityStepLog (
LogGUID
, LogContextID
, LogTypeID
, LogSourceName
, LogContent
, LogDate
, CreateDate
, CreatedBy
)
выбрать
LogGUID = newid ()
, LogContextID = newid ()
, LogTypeID = 2
, LogSourceName = 'тестовый тестовый тест'
, LogContent = (ВЫБЕРИТЕ верхнюю 1 * FROM ## SampleDataSampleData1, где DecisionLogID = SampleData.DecisionLogID для XML AUTO, ELEMENTS, ROOT ('BusinessRule'))
, LogDate = current_timestamp
, CreateDate = current_timestamp
, CreatedBy = 'тест, созданный с помощью
из ##SampleData SampleData
СэмУ pleData 100 000 строк, я запускаю его в цикле 5 раз, поэтому получаю 500 000 строк.
Поле LogContent в конечном итоге будет содержать такие данные, как:
-2147483643 0569281A-D1A3-49E3-9E68-BCAC62E2C1C3 1016 2 0 -2147483495 1 2009-05-18T11: 47: 00 нет
(извините, не уверен, будет ли это отформатированоправильно - это просто небольшой набор элементов).
А потом я просто запускаю очень простой sql -
SELECT *
FROM ActivityStepLog
WHERE LogContent.value('(/BusinessRuleDecisionLog/SampleData1/DecisionLogID)[1]', 'int') = -2147483535
Перед созданием первичного XML-индекса в LogContent требуется 8 секундпосле, это занимает около 12 секунд.Я очистил кеш и т. Д. (DROPCLEANBUFFERS и FREEPROCCACHE), похоже, он не влияет на пропорции, хотя и влияет на общее время.
Вот моя статистика:
С индексом xmlТаблица «xml_index_nodes_325576198_256000».Число сканирований 1000000, логическое чтение 3517272, физическое чтение 0, чтение с опережением 0, логическое чтение с бита 0, физическое чтение с бита 0, чтение с опережением чтения 0. Таблица «ActivityStepLog».Сканирование 1, логическое чтение 71694, физическое чтение 0, чтение с опережением 0, чтение логического объекта 0, чтение с физического объекта 0, чтение с чтения 0 0.
С индексом OUT xml
(Затронуто 5 строк) Таблица «ActivityStepLog».Сканирование 1, логическое чтение 71694, физическое чтение 0, чтение с опережением 0, чтение логического объекта 0, чтение с физического объекта 0, чтение с опережением 0.
Таким образом, логические операции чтения намного меньше при использовании OUTXML-индекс.Я попытался добавить ВСЕ доступные вторичные индексы, которые не улучшили производительность по сравнению с наличием основного XML-индекса.
Я проведу еще несколько исследований по этому вопросу, но я был бы очень признателен за любые указатели или комментарии.
спасибо, Сильвия