Как улучшить производительность нескольких «или» в заявлении Case - PullRequest
0 голосов
/ 15 апреля 2019

Я понимаю, что определенный подзапрос снижает производительность, и любопытно, что есть лучший способ написать такое утверждение Case. Я пытаюсь использовать «=», когда это возможно, но часто мне нужно выражение «как». Мои вопросы:

Если column_a = 1, будет ли этот оператор немедленно возвращать значение или все еще будет читать последующие операторы "или"?

case 

  when column_a = 1 
    or column_b like '%string a%'
    or column_b like '%string b%'
    or column_b like '%string c%'
  then 'Return A'

  when column_a = 2 
    or column_b like '%string d%'
    or column_b like '%string e%'
    or column_b like '%string f%'
  then 'Return B'
.
.
.
  else 'Return Z'
end

Лучше ли иметь длинный список "или", как показано, или лучше ставить каждую проверку в собственном выражении case, т.е.

case 

  when column_a = 1 
  then 'Return A'

  when column_b like '%string a%' 
  then 'Return A'

  when column_b like '%string b%'
  then 'Return A'
.
.
.

1 Ответ

0 голосов
/ 15 апреля 2019

Если column_a = 1, будет ли этот оператор возвращать значение немедленно или он все равно будет читать последующие операторы "или"?

Оператор немедленно возвращает результат без оценки остальных OR.

. Лучше иметь длинный список "или", как показано, или лучше ставить каждую проверкув собственном операторе case

Я бы порекомендовал прежний - по крайней мере сохранить его читабельным

Другой вариант переписать несколько операторов LIKE - использовать

REGEXP_CONTAINS(column_b, r'string a|string b|string c')    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...