我得到了以下SQL代码(select语句的一部分):
Case
When HilfsTab2.Gruppe = 'HST' And Basis.Breite_FLA = Basis.Breite Then 0
Else Case When HilfsTab2.Gruppe = 'SA' Or HilfsTab2.Gruppe = 'HO / TB' Or
HilfsTab2.Gruppe = 'PR' Then 0 Else Case
When HilfsTab2.Gruppe Is Null Then -1 Else 1 End End
End As IsHST_Fluegel
现在,我在一个包含数百万个条目的表上运行它。根据我的理解,SQL检查所有行的第一种情况,然后是所有条目的第二种情况,依此类推。这需要很长时间。现在我在想,需要有一种更简单的方法来做到这一点。
我在想一个存储过程/自定义函数,它基本上输出-1,0或1,具体取决于条目。
提前致谢
答案 0 :(得分:1)
为了提高速度,请先进行NULL
检查,最后进行列比较,然后重构以删除嵌套的CASE
:
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
答案 1 :(得分:0)
您的案例可以简化为:
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
但这不会加快你的查询速度。如果你想选择数百万行,那么无论如何都需要时间。