Đưa ra câu hỏi này trên reddit, tôi đã xóa sạch truy vấn để chỉ ra vấn đề nằm ở đâu trong truy vấn. Tôi sử dụng dấu phẩy trước và WHERE 1=1
để sửa đổi các truy vấn dễ dàng hơn, vì vậy các truy vấn của tôi thường kết thúc như thế này:
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
Về cơ bản, có người nói rằng 1 = 1 nói chung là lười biếng và không tốt cho hiệu suất .
Cho rằng tôi không muốn "tối ưu hóa sớm" - tôi thực sự muốn làm theo các thực hành tốt. Tôi đã xem xét các kế hoạch truy vấn trước đây, nhưng nói chung chỉ để tìm ra những chỉ mục nào tôi có thể thêm (hoặc điều chỉnh) để làm cho các truy vấn của tôi chạy nhanh hơn.
Câu hỏi sau đó thực sự ... có Where 1=1
gây ra những điều xấu xảy ra không? Và nếu vậy, làm thế nào tôi có thể nói?
Chỉnh sửa nhỏ: Tôi luôn luôn 'giả định' cũng 1=1
sẽ được tối ưu hóa, hoặc tệ nhất là không đáng kể. Không bao giờ đau lòng đặt câu hỏi về một câu thần chú, như "Goto's Evil" hoặc "Tối ưu hóa sớm ..." hoặc các sự kiện giả định khác. Không chắc chắn liệu 1=1 AND
có thực sự ảnh hưởng đến kế hoạch truy vấn hay không. Còn trong các câu hỏi con thì sao? CTE? Thủ tục?
Tôi không phải là một người để tối ưu hóa, trừ khi cần thiết ... nhưng nếu tôi đang làm điều gì đó thực sự "xấu", tôi muốn giảm thiểu các hiệu ứng hoặc thay đổi khi áp dụng.