В MySQL быстрее удалить и затем вставить или быстрее обновить существующие строки?

Прежде всего, позвольте мне просто сказать, что я использую PHP-фреймворк Yii, поэтому я ' я хотел бы оставаться в рамках определенного набора операторов SQL, если это возможно. Я знаю, что мог бы, вероятно, создать один огромный длинный оператор SQL, который бы делал все, но я бы предпочел не идти туда.

Хорошо, представьте, что у меня есть таблица Users и таблица FavColors. Затем у меня есть форма, в которой пользователи могут выбирать свои цветовые предпочтения, установив один или несколько флажков из большого списка возможных цветов.

Эти результаты хранятся в виде нескольких строк в таблице FavColors, например (id, user_id, color_id).

Теперь представьте, что пользователь входит и меняет свои цветовые предпочтения. В этом сценарии, что было бы наиболее эффективным способом получить новые цветовые предпочтения в базе данных?

Вариант 1:

  • Произведите массовое удаление всех строк, где user_id совпадает с
  • Затем выполните массовую вставку всех новые строки

Вариант 2:

  • Просмотрите каждую текущую строку, чтобы узнать, что ' s изменен и обновлен соответствующим образом
  • Если нужно вставить больше строк, сделайте это.
  • Если нужно удалить строки, сделайте это.

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

Вариант 2 потребует гораздо больше программной работы, но предотвратит ситуации, когда я удаляю строку, чтобы создать ее снова. Однако добавление дополнительной нагрузки в PHP может не окупить уменьшения нагрузки для MySQL.

Есть мысли? Что бы вы все делали?

9
задан Philip Walton 26 October 2010 в 02:31
поделиться