Otrzymałem następujący kod SQL (część instrukcji 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
Teraz sprawdzam to na kilku milionowym stolewpisy. Z mojego zrozumienia, SQL sprawdza pierwszy przypadek dla wszystkich wierszy, a następnie drugi dla wszystkich wpisów i tak dalej. To trwa wieki. Teraz myślałem, że musi być łatwiejszy sposób na zrobienie tego.
Myślałem o procedurze składowanej / funkcji niestandardowej, która w zasadzie wyprowadza -1, 0 lub 1 w zależności od wpisu.
Z góry dziękuję
Odpowiedzi:
1 dla odpowiedzi № 1Aby uzyskać możliwą poprawę prędkości, wykonaj NULL
najpierw sprawdź, porównanie kolumny i refaktor, aby usunąć zagnieżdżone 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
0 dla odpowiedzi nr 2
Twoja sprawa może zostać uproszczona, ponieważ:
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
Ale to nie przyspieszy twojego zapytania. Jeśli chcesz wybrać miliony wierszy, i tak zajęłoby to trochę czasu.