Tôi có 2 bảng (A và B) với cùng một khóa chính. Tôi muốn chọn tất cả hàng đó là A và không có trong B. Các công trình sau đây:Mysql chọn nơi không có trong bảng
select * from A where not exists (select * from B where A.pk=B.pk);
tuy nhiên nó có vẻ khá xấu (~ 2 giây trên chỉ 100k hàng trong A và 3-10k ít hơn trong B)
Có cách nào tốt hơn để thực hiện việc này không? Có lẽ như là một tham gia trái?
select * from A left join B on A.x=B.y where B.y is null;
Dữ liệu của tôi dường như chạy nhanh hơn một chút (~ 10%) nhưng nói chung thì sao?
Bạn có nghĩa là bạn có 100 nghìn hàng trong bảng A và 100 nghìn hàng trong bảng B không? Hoặc chỉ khoảng 300 hàng trong mỗi bảng, có nghĩa là quét hàng 100.000 (hoặc, hy vọng, quét chỉ mục). – ChrisInEdmonton