Data questa domanda su reddit, ho ripulito la query per sottolineare dove si trovava il problema nella query. Uso prima la virgola e WHERE 1=1
per semplificare la modifica delle query, quindi le mie query generalmente finiscono in questo modo:
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
Qualcuno ha sostanzialmente affermato che 1 = 1 è generalmente pigro e cattivo per le prestazioni .
Dato che non voglio "ottimizzare prematuramente", voglio seguire le buone pratiche. Ho già esaminato i piani di query in precedenza, ma in generale solo per scoprire quali indici posso aggiungere (o modificare) per rendere più veloci le mie query.
La domanda allora davvero ... fa Where 1=1
accadere cose brutte? E se sì, come posso dirlo?
Modifica minore: ho sempre anche "ipotizzato" che 1=1
sarebbe stato ottimizzato o, nel peggiore dei casi, trascurabile. Non fa mai male mettere in discussione un mantra, come "Goto's are Evil" o "Premature Optimization ..." o altri fatti ipotizzati. Non ero sicuro che 1=1 AND
avrebbe influenzato realisticamente i piani di query o meno. Che dire delle sottoquery? Di CTE? Procedure?
Non sono uno da ottimizzare, a meno che non sia necessario ... ma se sto facendo qualcosa di veramente "cattivo", vorrei minimizzare gli effetti o cambiare dove applicabile.