Влияние на производительность при использовании столбцов XML в таблице с MS SQL 2008 - PullRequest
1 голос
/ 07 июня 2010

Я использую простую таблицу с 6 столбцами, 3 из которых имеют тип XML, не ограниченный схемой. Когда размер таблицы достигает 120 000 или 150 000 строк, я вижу значительную потерю производительности при выполнении любого запроса в таблице. Для сравнения у меня есть другая таблица, которая увеличивается в размере примерно с той же скоростью, но содержит только скалярные типы (int, datetime, несколько столбцов с плавающей точкой). Эта таблица отлично работает даже после 200 000 строк. И, кстати, я не использую XQuery для столбцов xml, я использую только обычные операторы SQL-запросов.

Некоторые особенности: обе таблицы содержат поле DateTime с именем SampleTime. как оператор (он находится в хранимой процедуре, но я покажу вам фактический оператор)

SELECT MAX(sampleTime) SampleTime
FROM dbo.MyRecords
WHERE PlacementID=@somenumber

занимает 0 секунд для таблицы без столбцов xml и от 13 до 20 секунд для таблицы с столбцами XML. Это зависит от того, на каком диске я установил базу данных. На данный момент он сидит на другом шпинделе (не C :) и занимает 13 секунд.

Кто-нибудь видел такое поведение раньше, или есть какие-то намеки на то, что я делаю неправильно? Я попробовал это с SQL 2008 EXPRESS и полноценным SQL Server 2008, что не имело никакого значения. О, еще одна деталь: я делаю это из приложения на C #, .NET 3.5, используя SqlConnection, SqlReader и т. Д.

Буду признателен за понимание, спасибо!

Sam

Ответы [ 2 ]

0 голосов
/ 07 июня 2010

Мы заметили значительные проблемы с производительностью, когда размер отдельных строк XML превысил 64 КБ. Не уверен, что вы находитесь в этом диапазоне или нет, но это была разница между почти мгновенными запросами и запросами продолжительностью более 60 секунд.

В конце дня мы извлекли все запрашиваемые данные в обычные таблицы SQL, чтобы выполнить наш поиск. Кстати, это был последний раз, когда мы использовали тип данных xml.

0 голосов
/ 07 июня 2010

Есть ли у вас индексы PlacementID и sampleTime в таком порядке?

И размер таблицы, и столбцы не имеют значения, если индекс может удовлетворить запрос ("покрытие")

...