Является ли UPDATE значительно более эффективным, чем INSERT? - PullRequest
1 голос
/ 24 ноября 2011

Я сталкивался с программным обеспечением форума PHP, которое обновляет свои представления потоков каждый час.
Таким образом, каждый раз, когда вы просматриваете поток, в таблицу представлений потоков вставляется строка с идентификатором потока, затем сценарий запускается один раз в час и обновляет фактическое число просмотров в таблице потоков.

Мой вопрос: в чем логика? Почему бы просто не обновить таблицу потоков (т.е. views = views + 1)?

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Обновления в целом намного медленнее, чем вставки, вы можете думать об обновлении как об удалении и вставке.для обновлений может потребоваться блокировка для поддержки соответствия СУБД с помощью ACID, а для вставок у вас нет блокировки.

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

0 голосов
/ 24 ноября 2011

Вставка, скорее всего, всегда быстрее.Посмотрите на это следующим образом.

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

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

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