Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL简化案例_Sql_Case - Fatal编程技术网

SQL简化案例

SQL简化案例,sql,case,Sql,Case,我得到了以下SQL代码(select语句的一部分): 现在,我在一个包含数百万个条目的表上运行这个。据我所知,SQL在检查第一种情况时检查所有行,然后检查第二种情况下的所有条目,依此类推。这需要很长时间。现在我在想,需要有一个更简单的方法来做到这一点 我在考虑一个存储过程/自定义函数,它基本上输出-1、0或1,具体取决于条目 提前感谢您的案例可以简化为: Case When HilfsTab2.Gruppe = 'HST' And Basis.Breite_FLA = Basis.B

我得到了以下SQL代码(select语句的一部分):

现在,我在一个包含数百万个条目的表上运行这个。据我所知,SQL在检查第一种情况时检查所有行,然后检查第二种情况下的所有条目,依此类推。这需要很长时间。现在我在想,需要有一个更简单的方法来做到这一点

我在考虑一个存储过程/自定义函数,它基本上输出-1、0或1,具体取决于条目


提前感谢

您的案例可以简化为:

Case
      When HilfsTab2.Gruppe = 'HST' And Basis.Breite_FLA = Basis.Breite Then 0
      When HilfsTab2.Gruppe in ('SA', 'HO / TB', 'PR') Then 0
      When HilfsTab2.Gruppe Is Null Then -1
      Else 1
End As IsHST_Fluegel

但这不会加快您的查询速度。如果要选择数百万行,无论如何都需要时间。

为了可能提高速度,请先执行
NULL
检查,最后执行列比较,然后重构以删除嵌套的
大小写:

CASE WHEN HilfsTab2.Gruppe IS NULL
     THEN -1
     WHEN HilfsTab2.Gruppe IN ('SA', 'HO / TB', 'PR')
       OR (HilfsTab2.Gruppe = 'HST' AND Basis.Breite_FLA = Basis.Breite)
     THEN 0
     ELSE 1
END AS IsHST_Fluegel

调优高度依赖于DBMS。您使用的是哪种数据库管理系统?神谕博士后?案例项目的顺序并不重要(应该?)。SQL不会(也可能不会)短路布尔表达式。我不知道是否有DBMS的工作方式不同。好的观点!我实际上也不知道这个问题的答案——假设短路会发生,似乎表明可能会发生,但还没有找到任何确凿的证据,正如你所说,可能是DBMS相关的。。。最简单的方法可能就是@spustous尝试一下,然后报告它是否有任何不同。我有一个问题,如果我自己创建一个程序来处理这个问题,这会不会提高速度?你是说UDF(用户定义函数)吗?我怀疑这是否会提高速度——如果有任何影响的话,它可能会产生相反的效果。查询中是否还有其他可能影响速度的内容?如果有,我必须检查。这是一个相当复杂的查询,因此这可能不是唯一的问题(如果是问题的话)。
CASE WHEN HilfsTab2.Gruppe IS NULL
     THEN -1
     WHEN HilfsTab2.Gruppe IN ('SA', 'HO / TB', 'PR')
       OR (HilfsTab2.Gruppe = 'HST' AND Basis.Breite_FLA = Basis.Breite)
     THEN 0
     ELSE 1
END AS IsHST_Fluegel