SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
bạn có thể làm được việc này. kết nối bên ngoài sẽ mang lại một chút hiệu suất, nhưng không nhiều.
hệ thống cơ sở dữ liệu mới có thể sẽ tối ưu hóa truy vấn của bạn để không có bất kỳ sự khác biệt nào.
cách chính xác ở đây là bộ nhớ đệm! thử bộ lưu trữ truy vấn và bộ nhớ đệm cấp ứng dụng nếu có thể.
tất nhiên bạn cần các chỉ mục thích hợp.
và ý tôi là trên cả hai bảng và tốt nhất là chỉ mục băm vì nó sẽ có thời gian tra cứu tĩnh so với bất kỳ cây nào có logarit
Hãy thử giải thích trước truy vấn để xem điều gì thực sự làm chậm quá trình này.
nếu bạn thực sự cần quá trình này nhanh chóng, bạn có thể xác minh lại cấu trúc dữ liệu của mình.
bạn có thể tạo một trình kích hoạt để đánh dấu một cờ trong bảng A cho dù có mục nhập tương ứng trong bảng hay không. tất nhiên là dự phòng dữ liệu id này, nhưng đôi khi giá trị của nó. chỉ cần nghĩ về nó như bộ nhớ đệm.
một suy nghĩ cuối cùng:bạn có thể thử SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
nó có thể nhanh hơn một chút vì không cần nối thực tế, tuy nhiên nó cũng có thể chậm hơn vì tra cứu trong tập hợp sẽ là quét toàn bộ. Tôi thực sự không chắc điều này sẽ được xử lý như thế nào nhưng có thể đáng để thử.