Compte tenu de cette question sur reddit, j'ai nettoyé la requête pour indiquer où se trouvait le problème dans la requête. J'utilise d'abord des virgules et WHERE 1=1
pour faciliter la modification des requêtes, mes requêtes se terminent généralement comme suit:
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
Quelqu'un a essentiellement dit que 1 = 1 est généralement paresseux et mauvais pour les performances .
Étant donné que je ne veux pas "optimiser prématurément" - je veux suivre les bonnes pratiques. J'ai déjà examiné les plans de requête, mais généralement uniquement pour savoir quels index je peux ajouter (ou ajuster) pour accélérer l'exécution de mes requêtes.
La question est alors vraiment ... de Where 1=1
provoquer de mauvaises choses? Et si oui, comment savoir?
Édition mineure: j'ai toujours `` supposé '' que ce 1=1
serait optimisé, ou au pire négligeable. Ne fait jamais de mal à remettre en question un mantra, comme "Goto's are Evil" ou "Premature Optimization ..." ou d'autres faits supposés. Je ne savais pas si 1=1 AND
cela affecterait ou non les plans de requête de manière réaliste. Et dans les sous-requêtes? CTE? Procédures?
Je ne suis pas du genre à optimiser, sauf si c'est nécessaire ... mais si je fais quelque chose qui est réellement "mauvais", je voudrais minimiser les effets ou changer le cas échéant.