给定有关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
会被优化的东西,或者最坏的情况可以忽略不计。质疑诸如“ Goto's are Evil”或“ Premature Optimization ...”或其他假定事实之类的口头禅也毫不费力。不确定是否1=1 AND
会切实影响查询计划。子查询呢?CTE的?程序?
我不是要优化的人,除非需要...但是如果我做的事情实际上是“不好的”,我想将影响降到最低或在适用的情况下进行更改。