如何提高Case语句中多个“或”的性能

时间:2019-04-15 16:31:54

标签: sql performance google-bigquery case

我意识到一个特定的子查询会降低性能,并且很好奇是否有更好的方式编写这样的Case语句。我试图在可能的情况下使用“ =”,但经常需要“ like”语句。我的问题是:

如果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 :(得分:0)

  

如果column_a = 1,此语句会立即返回一个值,还是会继续读取后续的“或”语句?

该语句将立即返回结果,而不评估其余OR

  

最好是显示一长串的“或”,或者将每个检查放在自己的case语句中

我建议使用前者-至少保持可读性

另一个重写多个LIKEs语句的选项是使用

REGEXP_CONTAINS(column_b, r'string a|string b|string c')