Reddit'te bu soru göz önüne alındığında , sorunun sorgunun neresinde olduğunu göstermek için sorguyu temizledim. İlk önce virgül kullanıyorum ve WHERE 1=1
sorguları değiştirmeyi kolaylaştırmak için sorgularım genellikle şöyle:
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
Birisi temel olarak 1 = 1'in genellikle tembel ve performans için kötü olduğunu söyledi .
Ben "erken optimize etmek" istemiyorum göz önüne alındığında - Ben iyi uygulamaları takip etmek istiyorum. Daha önce sorgu planlarına baktım, ancak genellikle sadece daha hızlı çalışmasını sağlamak için hangi dizinleri ekleyebileceğimi (veya ayarlayabildiğimi) öğrenmek için.
O zaman soru gerçekten ... Where 1=1
kötü şeylerin olmasına neden oluyor mu? Ve eğer öyleyse, nasıl söyleyebilirim?
Küçük Düzenleme: Daima 1=1
optimize edilebileceğini veya en azından ihmal edilebilir olacağını da varsaydım . "Goto's Evil" veya "Prematüre Optimizasyon ..." veya diğer varsayılan gerçekler gibi bir mantrayı sorgulamak asla acıtmaz. 1=1 AND
Sorgu planlarını gerçekçi bir şekilde etkileyip etkilemeyeceğinden emin değildi. Alt sorgularda ne olacak? CTE'ler? Prosedürler?
İhtiyaç duyulmadıkça optimizasyon yapacak biri değilim ... ama aslında "kötü" bir şey yapıyorsam, etkileri en aza indirmek veya uygulanabilir olduğu yerde değiştirmek istiyorum.