鉴于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 是邪恶的”或“过早的优化......”或其他假设的事实。不确定是否1=1 AND
会实际影响查询计划。在子查询中呢?CTE? 手续?
除非需要,否则我不是要优化的人......但如果我正在做一些实际上“坏”的事情,我想尽量减少影响或在适用的情况下进行更改。