Tôi có một SP trong SQL Server chạy hàng trăm lần mỗi phút và cần kiểm tra lưu lượng truy cập đến dựa vào cơ sở dữ liệu. Tại thời điểm này nó như sauTốc độ nào nhanh hơn, EXISTS trước hoặc sau INSERT?
INSERT INTO table
SELECT @value1,@value2 WHERE NOT EXISTS
(SELECT * FROM table WHERE value1 = @value1 AND value2 = @value2);
Tuy nhiên, tôi cũng có thể đi với
IF NOT EXISTS(SELECT * FROM table WHERE value1 = @value1 AND value2 = @value2)
INSERT INTO table (value1,value2) VALUES (@value1,@value2);
Đó sẽ là nhanh hơn? Tôi có cảm giác không có nhiều khác biệt giữa họ nhưng tôi về mặt lịch sử không giỏi về TSQL ... =/
CẬP NHẬT: Rất tiếc ... có nghĩa là nói rằng EXISTS sử dụng nhiều hơn 1 giá trị để tìm xem bản ghi tồn tại, do đó, một ràng buộc duy nhất sẽ không hoạt động. Đã chỉnh sửa mẫu để phản ánh điều đó ...
http://stackoverflow.com/questions/2276023/t-sql-insert-or-update –
@carlos: Đó thực sự là một câu hỏi khác, mặc dù hơi liên quan. –
Lựa chọn thứ hai của bạn không an toàn. Một 'INSERT' đồng thời có thể xảy ra ở giữa các câu lệnh' IF' và 'INSERT'. – Quassnoi