Один, если или несколько, где? - PullRequest
0 голосов
/ 13 октября 2019

Допустим, я хочу установить значение для нескольких строк в зависимости от значения другой ячейки. Таким образом, я могу сделать это двумя способами:

  1. Выбрать все элементы и установить различные значения, используя IF:
Update `table` set `a` = 
    if (
        `b`>=100,  
        if (`b`>=1000, ... , 'Less than thousand') , 
        'Less than hundred'
    ) 
where `someid`='1' 
Или сделать несколько обновлений:
Update `table` set `a` = 'Less than hundred'  where `someid`='1' and `b`<100;
Update `table` set `a` = 'Less than thousand' where `someid`='1' and `b`<1000 and `b`>=100;
...

Какой из них будет лучше практиковаться в производительности?

1 Ответ

1 голос
/ 13 октября 2019

Я бы порекомендовал выполнить один запрос и использовать CASE insteaf из IF, чтобы упростить синтаксис.

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

UPDATE mytable 
SET a = CASE
    WHEN b < 100 THEN 'Less than an hundred'
    WHEN b < 1000 THEN 'Less than an thousand'
    ...
END

При индексе b это должно быть очень эффективным.

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