MySQL "CASE WHEN" контролирует несколько запросов VS - PullRequest
1 голос
/ 03 февраля 2012

В промежутке между двумя приведенными ниже запросами, который быстрее:

update t set v = case when id = 1000000 then 100 when id = 10000000 then 500 else v end

или

update t set v = 100 where id = 1000000;
update t set v = 500 where id = 10000000;

таблица t имеет уникальный индекс по идентификатору, и таблица может быть довольнобольшой (миллионы записей).

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

Заранее спасибо за любые ответы!

1 Ответ

0 голосов
/ 03 февраля 2012

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

update t
   set v = if( id = 1000000, 100, 500 )
   where id in ( 1000000, 10000000 )
...