5

Учитывая два сценария на SQL Server 2008/2005 - 1 Таблица имеет 5 рядов 2 Таблица содержит 1 миллион строкБыстро обновлять строку, или УДАЛИТЬ ее, и ВСТАВИТЬ новую?

Если нужно обновить несколько строк, что является эффективным и почему? 1) ОБНОВЛЯЙТЕ нужные столбцы 2) УДАЛИТЕ строку и ВСТАВЬТЕ новую строку с обновленной информацией

+0

Если вам нужно обновить несколько строк, я не думаю, что производительность имеет значение, как если бы вам нужно было обновить все 1 миллион строк. – BoltClock

+0

Я обновил вопрос, чтобы упомянуть, что я идеально ориентирован на SQL 2005/2008. –

+0

Подумайте о том, что вы просите - выполняет ли две операции быстрее, чем одна? Чтобы удалить rec, необходимо удалить его из блока данных и любых связанных блоков индексов. Вставка должна иметь обратную сторону. Обновление оптимизировано для обновления на месте так же мало, сколько необходимо, только касание индексов при изменении индексированных столбцов. Короче говоря, обновление происходит намного быстрее. – Will

ответ

17

Вы не должны задавать этот вопрос. Вы спрашиваете: «Лучше ли это сделать правильно или не так, во имя какой-то туманной идеи« быстрее »?

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

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

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

Даже если конкретно DID есть проблемы с обновлениями слишком медленно, мы не можем ответить на вопрос «Является ли X быстрее, чем Y», потому что вы не дали нам почти достаточно информации, такие как:

  • Какую базу данных вы используете
  • макеты таблиц
  • Какие индексы на базе
  • Как вы взаимодействия с базой данных

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

+4

Немного грубо, но так верно. – Damien

+1

Очки хорошо приняты. Ну, этот вопрос был одним из вопросов, которые меня задавали в интервью в компании. Я сам был поражен этим неожиданным вопросом, и я дал им свои мысли и причины. Хотелось поделиться этим вопросом, если я раскрываю какие-либо новые измерения, которые, возможно, раньше не замечу. Спасибо за ваше время на этот вопрос. –

+0

Каков предпочтительный способ реализации семантики: «Я хочу, чтобы база данных содержала ровно одну запись с PK ххх и некоторые определенные столбцы, как указано, задавая оставшиеся столбцы конкретным значениям, если запись не существует, но оставляя их в покое, если один делает "? Сделайте вставку, которая может выйти из строя (дублировать ключ) и выполнить обновление, если вставка не удалась, попробуйте вставить и обновить, используя одну транзакцию SQL, выполните SELECT, чтобы увидеть, существует ли запись, сделать вставку, если нет (надеясь, что никто не победит мне это) и обновить иначе, или что? Предположим, что запись будет существовать в 99% случаев. – supercat

1

Обычно обновление одной строки будет быстрее. Причина, заключающаяся в удалении существующей строки и вставке новой строки, обе эти операции будут влиять на кластеризованный индекс. Обновление одной строки также повлияет на различные индексы, но не на кластерный индекс. Нет данных, чтобы поддержать мое утверждение, но логически двигатели БД должны вести себя таким образом.

Смежные вопросы