TSQL Merge Performance - PullRequest
       14

TSQL Merge Performance

0 голосов
/ 21 января 2011

1001 ** * Сценарий * 1003

У меня есть таблица с примерно 24 миллионами записей. Таблица имеет историю цен, относящуюся к отдельным клиентам, и рассчитывается ежедневно. На каждый день в среднем 6 миллионов записей. Каждое утро генерируется прайс-лист и выполняется отчет о слиянии, чтобы отразить изменения в их ценах.

Оператор слияния начинается с вставки предыдущих данных предыдущего дня в таблицу переменных, затем эта таблица объединяется с фактической таблицей. Основная проблема в том, что оператор слияния занимает довольно много времени.

Мой реальный вопрос касается производительности использования таблицы переменных по сравнению с физической таблицей по сравнению с временной таблицей. Какова наилучшая практика для таких больших слияний?

Ответы [ 3 ]

2 голосов
/ 21 января 2011

Мысли

Я бы рассмотрел временную таблицу: в ней есть статистика, которая поможет. Предполагается, что переменная таблицы всегда имеет одну строку. Кроме того, ввод-вывод можно шунтировать на отдельные диски (при условии, что у вас есть tempdb отдельно)

Если отдельная транзакция не требуется, я бы разделил MERGE также на последовательность DELETE, UPDATE, INSERT, чтобы уменьшить объем работы, необходимой для каждого действия (что уменьшает количество необходимой информации отката и количество блокировок и т.д.

0 голосов
/ 21 января 2011

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

0 голосов
/ 21 января 2011

Проверьте, нет ли у вас индексов в таблицах. Индексы будут обновляться каждый раз, когда вы добавляете / удаляете записи в этой таблице.

Попробуйте удалить индексы перед объединением записей, а затем заново создать его после объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...