Подтвердить что ты не робот

Стоимость вложений и обновление в SQL Server

У меня есть таблица с более чем миллионными рядами. Эта таблица используется для индексации изображений tiff. Каждое изображение имеет такие поля, как date, number и т.д. У меня есть пользователи, которые индексируют эти изображения партиями по 500. Мне нужно знать, лучше ли сначала вставить 500 строк, а затем выполнить 500 обновлений или, когда пользователь завершает индексирование, чтобы сделать 500 вставок со всеми данными. Очень важно то, что если я сначала сделаю 500 вставок, на этот раз бесплатно для меня, потому что я могу сделать это накануне.

Итак, вопрос: лучше ли делать вставки или вставки и обновления, и почему? Я определил значение id для каждого изображения, и у меня также есть другие индексы в полях.

4b9b3361

Ответ 1

Обновления на сервере Sql приводят к призрачным строкам - т.е. Sql пересекает одну строку и помещает новую. Перечеркнутая строка удаляется позже.

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

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

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

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

Вы можете придумать это как добавление к адресной книге: Mr Z можно просто добавить на последнюю страницу, в то время как вам нужно найти место посередине для Mr M.

Ответ 2

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

Поскольку вы используете значение id (которое, по-видимому, индексируется) для обновлений, накладные расходы будут очень низкими. У вас также будет меньше данных во время ваших обновлений.

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

Наконец, проверьте это, чтобы увидеть фактическую производительность на вашем сервере, прежде чем принимать окончательное решение.

Ответ 3

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

Ответ 4

План выполнения каждого запроса скажет вам, какой из них должен быть дороже. Реальным ограничивающим фактором будет запись на диск, поэтому вам может потребоваться выполнить некоторые тесты во время работы perfmon, чтобы увидеть, какой запрос вызывает больше записей, и приводит к тому, что очередь на диске становится самой длинной (дольше - плохо).

Ответ 5

Это не режет и сушит вопрос. Очки Кришны и Галегия находятся на месте.

Для обновлений влияние будет уменьшаться, если обновления влияют на поля фиксированной длины. Если вы обновляете поля varchar или blob, вы можете добавить стоимость разбиений на страницы во время обновления, когда новое значение превышает длину старого значения.

Ответ 6

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