Biorąc pod uwagę to pytanie na reddit, wyczyściłem zapytanie, aby wskazać, gdzie problem był w zapytaniu. Najpierw używam przecinka, WHERE 1=1
aby ułatwić modyfikowanie zapytań, więc moje zapytania zwykle kończą się tak:
SELECT
C.CompanyName
,O.ShippedDate
,OD.UnitPrice
,P.ProductName
FROM
Customers as C
INNER JOIN Orders as O ON C.CustomerID = O.CustomerID
INNER JOIN [Order Details] as OD ON O.OrderID = OD.OrderID
INNER JOIN Products as P ON P.ProductID = OD.ProductID
Where 1=1
-- AND O.ShippedDate Between '4/1/2008' And '4/30/2008'
And P.productname = 'TOFU'
Order By C.CompanyName
Ktoś w zasadzie powiedział, że 1 = 1 jest ogólnie leniwy i źle wpływa na wydajność .
Biorąc pod uwagę, że nie chcę „przedwcześnie optymalizować” - chcę przestrzegać dobrych praktyk. Wcześniej przeglądałem plany zapytań, ale ogólnie tylko po to, aby dowiedzieć się, jakie indeksy mogę dodać (lub dostosować), aby moje zapytania działały szybciej.
Pytanie naprawdę ... czy Where 1=1
powoduje złe rzeczy? A jeśli tak, jak mogę to stwierdzić?
Drobna edycja: Zawsze też „zakładałem”, 1=1
że zostanie zoptymalizowany, aw najgorszym razie będzie nieistotny. Nigdy nie boli kwestionować mantry, takiej jak „Goto's Evil” lub „Premature Optimization ...” lub inne domniemane fakty. Nie byłem pewien, czy 1=1 AND
realistycznie wpłynie to na plany zapytań, czy nie. A co z podkwerendami? CTE? Procedury?
Nie jestem osobą do optymalizacji, chyba że jest to potrzebne ... ale jeśli robię coś, co w rzeczywistości jest „złe”, chciałbym zminimalizować efekty lub zmienić w stosownych przypadkach.