0

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

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。

提前致谢

4

2 回答 2

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
于 2013-09-24T11:44:06.177 回答
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

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

于 2013-09-24T11:38:06.363 回答