Производительность MySQL УДАЛИТЬ или ОБНОВИТЬ? - PullRequest
8 голосов
/ 05 мая 2009

У меня есть таблица MyISAM с более чем 10 ^ 7 строками. При добавлении данных к нему, я должен обновить ~ 10 строк в конце. Это быстрее, чтобы удалить их и затем вставить новые, или это быстрее, чтобы обновить эти строки? Данные, которые должны быть обновлены, не являются частью индекса. Как насчет индекса / фрагментации данных

Ответы [ 5 ]

21 голосов
/ 05 мая 2009

UPDATE намного быстрее.

Когда вы UPDATE, записи таблицы просто перезаписываются новыми данными.

Когда вы DELETE, индексы должны обновляться (помните, что вы удаляете всю строку, а не только столбцы, которые нужно изменить), и блоки данных могут быть перемещены (если вы достигнете предела PCTFREE)

И все это нужно сделать снова на INSERT.

Вот почему вы всегда должны использовать

INSERT ... ON DUPLICATE KEY UPDATE

вместо REPLACE.

Первый - это операция UPDATE в случае нарушения ключа, а второй - DELETE / INSERT.

4 голосов
/ 05 мая 2009

Это быстрее, чтобы обновить. Вы также можете использовать INSERT ON DUPLICATE KEY UPDATE

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

Подробнее читайте в обновлении Документация

2 голосов
/ 14 сентября 2009

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

http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html

Это позволит вам сохранять данные исторически и не ухудшать производительность.

1 голос
/ 05 мая 2009

Логически DELETE + ADD = 2 действия, UPDATE = 1 действие. Также удаляем и добавляем новые идентификаторы записей об изменениях в auto_increment, так что если эти записи имеют отношения, которые будут нарушены или потребуются также обновления. Я бы пошел на ОБНОВЛЕНИЕ.

0 голосов
/ 05 мая 2009

при использовании обновления, где Column = 'что-то' должно использовать индекс, если критерий поиска находится в индексе (будь то поиск или сканирование - это совсем другая проблема).

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

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