Như tiêu đề cho thấy ... Tôi đang cố gắng tìm ra cách nhanh nhất với ít chi phí nhất để xác định xem một bản ghi có tồn tại trong một bảng hay không.
Truy vấn mẫu:
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
Giả sử ?
được hoán đổi với 'TB100'
... cả truy vấn thứ nhất và thứ hai sẽ trả về kết quả chính xác như nhau (giả sử ... 1
cho cuộc trò chuyện này). Truy vấn cuối cùng sẽ trả về 'TB100'
như mong đợi hoặc không có gì nếu id
không có trong bảng.
Mục đích là để tìm ra nếu id
trong bảng hay không. Nếu không, chương trình tiếp theo sẽ chèn bản ghi, nếu có, chương trình sẽ bỏ qua nó hoặc thực hiện truy vấn CẬP NHẬT dựa trên logic chương trình khác ngoài phạm vi của câu hỏi này.
Cái nào nhanh hơn và có ít chi phí hơn? (Điều này sẽ được lặp lại hàng chục ngàn lần mỗi lần chạy chương trình và sẽ được chạy nhiều lần trong ngày).
(Chạy truy vấn này với M $ SQL Server từ Java thông qua trình điều khiển JDBC được cung cấp M $)
if exists(select null from products where id = @id)
; nếu trong một truy vấn được gọi trực tiếp bởi một khách hàng select case when exists (...) then 1 else 0 end
.