Эффективный UPDATE MySQL?

153
07 мая 2019, 18:10

Пример кода:

UPDATE tbl_country SET price = CASE
WHEN code = 1 THEN 123;
WHEN code = 2 THEN 456;
…
END
WHERE code IN (1,2,…)
AND id = 222

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

Прошу объяснить, будет ли эффективней составить список последовательных UPDATE через запятую, например, так:

$query = 
 "UPDATE tbl_country SET price = 123 WHERE code = 1 AND id = 222;
  UPDATE tbl_country SET price = 456 WHERE code = 2 AND id = 222;
  ...
 ";

UPD:

Ответом на вопросы о произодительности оказался этот топик, в частности, этот ответ.

Answer 1

Запросы очень разные. В первом не указано условие where и возможно обновляются все записи, во втором выборка осуществляется скорее всего по первичному ключу и обновляются 3 записи. Сложно понять чего вы хотите сделать, но дам вам несколько советов.

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

Чтобы делать предположения об эффективности изучите работу explain, и научитесь профилировать своё приложение.

Избегайте преждевременной оптимизации. В случае, когда надо обновить значения в таблице один раз (раз в полгода решили заменить test на testing) эффективность не так уж и важна.

READ ALSO
Не могу получить содержимое ивента для вайбер бота

Не могу получить содержимое ивента для вайбер бота

Есть такой код, который направляет запрос пользователю на получение телефона, мне нужно получить ответХотел увидеть содержание ответа, но получаю...

217
Узнать имя диска по директории

Узнать имя диска по директории

Появилась необходимость в написании функции, которая на вход получает директорию диска (например C:\)А на выходе выводит название диска

184
как отправить post запрос qt 5.11

как отправить post запрос qt 5.11

Я использую QNetworkAccessManager, и мне нужно сделать следующее: отправить post запрос, так чтобы следущий код на php мог показать мои аргументы:

196
Получение расчитанных данных из phpexcel

Получение расчитанных данных из phpexcel

Ребята, нужна ваша помощь

195