Sử dụng NOT EXISTS
SELECT p.*
FROM TABLE_PRODUCT p
WHERE p.astatus = 'APAST'
AND NOT EXISTS (SELECT NULL
FROM TABLE_USER_OWNED_AUCTION uoa
WHERE uoa.specific_product_id = p.specific_product_id)
Sử dụng LEFT JOIN/IS NULL
SELECT p.*
FROM TABLE_PRODUCT p
LEFT JOIN TABLE_USER_OWNED_AUCTION uoa ON uoa.specific_product_id = p.specific_product_id
WHERE p.astatus = 'APAST'
AND uoa.own_id IS NULL
Giải thích
Truy vấn tối ưu nhất có thể được xác định bằng cách nếu các cột được so sánh giữa hai bảng là NULLable (IE:nếu các giá trị của specific_product_id
trong một trong hai bảng có thể là NULL
).
- Nếu nullable,
NOT IN
hoặcNOT EXISTS
là lựa chọn tốt nhất trong MySQL - Nếu NOT nullable,` LEFT JOIN / IS NULL là lựa chọn tốt nhất trong MySQL
Phụ lục
Khi truy vấn tối ưu đã được xác định, hãy xem tạo chỉ mục (có thể bao gồm các chỉ mục) ít nhất là:
-
specific_product_id
-
TABLE_PRODUCT.astatus