Tôi tò mò cách nào dưới đây sẽ hiệu quả hơn?
Tôi luôn thận trọng khi sử dụng IN
vì tôi tin rằng SQL Server biến tập kết quả thành một IF
tuyên bố lớn . Đối với một tập kết quả lớn, điều này có thể dẫn đến hiệu suất kém. Đối với các tập kết quả nhỏ, tôi không chắc là tốt hơn. Đối với tập kết quả lớn, sẽ không EXISTS
hiệu quả hơn?
WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)
so với
WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
select 1 from Base...
vào bạn where exists
vì bạn không thực sự quan tâm đến kết quả, chỉ là một hàng thực sự tồn tại.