Hãy để tôi giải thích bằng ví dụ. Hãy xem xét bảng sau:Cách nhanh nhất để xóa tất cả khách hàng khỏi SQL Server dựa trên khách hàng đó không đáp ứng một tiêu chí duy nhất là
Customer Id | Food
------------+---------
1 | Pizza
1 | Burger
1 | Hot Dog
2 | Milkshake
2 | Burger
3 | Pizza
Tôi muốn xóa tất cả các hồ sơ cho khách hàng có KHÔNG BAO GIỜ ra lệnh Pizza. Vì vậy, tôi chỉ nên để này (khách hàng # 2 bị xóa):
Customer Id | Food
------------+---------
1 | Pizza
1 | Burger
1 | Hot Dog
3 | Pizza
Tôi biết tôi có thể làm một NOT IN
nhưng hiệu suất là khủng khiếp.
Cách hiệu quả nhất để viết truy vấn này để đạt được điều này so với 100.000 bản ghi trong SQL Server là gì?
Sẽ hữu ích nếu bạn đưa ra truy vấn bạn đã thử. Bạn đã thử ['NOT EXISTS'] (http://sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/) chưa? – Appulus
NẾU phiên bản NOT EXISTS vẫn chưa đủ nhanh cho bạn, hãy thử sử dụng 'DELETE TOP (x) FROM FROM WHERE NOT EXISTS ....' trong đó x là kích thước lô. Nói 10.000. Điều này sẽ cho phép bạn chia nhỏ việc xóa thành các lô và giảm kích thước giao dịch. –