2009-08-19 1 views
0

Для определенной части бизнес-логики последовательность может быть либо двумя отдельными обновлениями, либо удалением, за которым следует вставка. В принципе, обновление приведет к аннулированию столбца, поэтому я могу сделать его похожим на удаление. Меня не интересуют потери строк (так что мягкое удаление не требуется): какой более эффективный подход?Что более дорого, 2 обновления, или удалить и вставить?

+3

В большинстве баз данных есть опции (например, «объясните»), которые подробно излагают, какую работу они должны выполнять, чтобы удовлетворить определенный запрос и какова стоимость. Вы пытались использовать это на своих целевых РСУБД? – Promit

+0

Я попробую это ... спасибо – 2009-08-19 04:33:12

ответ

0

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

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

0

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

И удаление данных, которые вам не нужны, явно менее дорогостоящее, чем их сохранение.

Что касается фактической скорости, я бы предположил, что это пренебрежимо мало, если профилирование не докажет обратное.

1

Бенчмарк их. Не забудьте также проверить другие запросы в таблице (таблицах).

Еще лучше, выберите, какой из них приведет к самой разумной модели данных.

1

Лучше всего измерить, но это помогает понять, что происходит на уровне диска. Вот что происходит концептуально:

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

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

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