Tôi cảm thấy nó đáng để chỉ ra, mặc dù nó đã được chạm vào trong các bình luận, rằng trong tình huống này:
SELECT 1 FROM my_table WHERE *indexed_condition* LIMIT 1
Là vượt trội so với:
SELECT * FROM my_table WHERE *indexed_condition* LIMIT 1
Điều này là do truy vấn đầu tiên có thể được thỏa mãn bởi chỉ mục, trong khi truy vấn thứ hai yêu cầu tra cứu hàng (trừ khi có thể tất cả các cột của bảng nằm trong chỉ mục được sử dụng).
Thêm LIMIT
mệnh đề cho phép động cơ dừng lại sau khi tìm thấy bất kỳ hàng nào.
Truy vấn đầu tiên phải tương đương với:
SELECT EXISTS(SELECT * FROM my_table WHERE *indexed_condition*)
Việc gửi các tín hiệu tương tự đến động cơ (1 / * không có sự khác biệt ở đây), nhưng tôi vẫn viết 1 để củng cố thói quen khi sử dụng EXISTS
:
SELECT EXISTS(SELECT 1 FROM my_table WHERE *indexed_condition*)
Có thể có ý nghĩa để thêm EXISTS
gói nếu bạn yêu cầu trả lại rõ ràng khi không có hàng nào khớp.
...EXISTS( SELECT 1/0 FROM someothertable)
. Đối với SQL Server & Oracle - việc sử dụng *, 1 hoặc NULL không có gì khác biệt vì EXISTS chỉ kiểm tra boolean dựa trên 1+ tiêu chí WHERE phù hợp.