redditに関するこの質問を踏まえて、クエリをクリーンアップして、クエリのどこに問題があるのかを指摘しました。最初にコンマを使用しWHERE 1=1
、クエリの変更を簡単にするため、クエリは通常、次のようになります。
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
誰かが基本的に、1 = 1は一般に怠け者でパフォーマンスに悪いと言いました。
「時期尚早に最適化する」ことを望まないことを考えると、私は良い習慣に従いたいと思います。以前にクエリプランを見てきましたが、一般的には、クエリをより高速に実行するために追加(または調整)できるインデックスを見つけるためだけです。
質問は本当に... Where 1=1
悪いことが起こるのですか?もしそうなら、どうすればわかりますか?
マイナーな編集:私も常に「想定」しており、それ1=1
が最適化されているか、最悪の場合無視できると思います。「後藤は悪」や「時期尚早な最適化...」、またはその他の想定される事実など、マントラに疑問を投げかけることはありません。1=1 AND
クエリプランに現実的に影響するかどうかはわかりませんでした。サブクエリについてはどうですか?CTEの?手順?
必要な場合を除き、最適化する人ではありません...しかし、実際に「悪い」ことをしている場合、影響を最小限に抑えるか、必要に応じて変更したいと思います。