Tôi có một số mã .NET để kiểm tra sự tồn tại của một bản ghi SQL ở một khoảng thời gian vừa phải cao. Tôi đang tìm cách kiểm tra này là "rẻ" . càng tốt"SELECT TOP 1 1" VS "IF EXISTS (SELECT 1"
tôi đang tự hỏi những đặc điểm của hai truy vấn:
IF EXISTS(SELECT 1
FROM BigTable
WHERE SomeColumn = 200)
SELECT 1 AS FOUND
ELSE
SELECT 0 AS FOUND
VS
SELECT TOP 1 1
FROM BigTable
WHERE SomeColumn = 200
cả hai đều tạo ra kế hoạch thực hiện tương tự Nhưng SELECT TOP 1 1 dường như thực hiện nhanh hơn.: Ít truy vấn để phân tích cú pháp và khi nào không tìm thấy bản ghi, nó sẽ gửi ít xuống đường ống. Tôi cũng giả sử nó chạy nhanh hơn ở máy khách bởi vì tôi chỉ cần kiểm tra Record Count, thay vì marshaling giá trị trả về của IF EXISTS.
Hầu hết các lợi ích hiệu suất đều không đáng kể. Nhưng nếu cả hai đều trả về cùng một kết quả, thì tại sao không chọn phương thức nhanh hơn ?
Có phải "CHỌN TOP 1 1" THEE cách tốt nhất để kiểm tra sự tồn tại của bản ghi trong .NET?
(Chúng tôi sử dụng .NET 3.5, và tôi đang cố gắng tránh LINQ vì nó không được sử dụng ở nơi khác trong ứng dụng. Chúng tôi cũng có một số ứng dụng VB6 cũ mà chúng tôi đang di chuyển/viết lại, vì vậy chúng có thể cần thực hiện tốt.)
CHỈNH SỬA: Chỉ cần thêm một chút chi tiết về thiết kế. Bản ghi này là "tiêu đề". Có một bảng khác có các bản ghi con sẽ được đọc/phân tích cú pháp khi tìm thấy tiêu đề này. Việc thiếu hồ sơ là một điều tốt: không có việc phải làm.
EDIT2: Việc thiếu bản ghi đáp ứng điều kiện sẽ xảy ra thường xuyên hơn. Họ đến trong những con sóng lẻ tẻ.
Nó không hoạt động khi không có hàng đáp ứng điều kiện. Thử 'SELECT TOP 1 1 FROM BigTable trong đó 1 = 0' –
Đó là vấn đề. Tôi đang kiểm tra sự tồn tại của một hàng DOES đáp ứng được điều kiện. –
Sau "EDIT": Tại sao bạn kiểm tra sự tồn tại của bản ghi thay vì chỉ cố gắng tìm nạp bản ghi duy nhất phù hợp với tiêu chí của bạn? Nếu tìm nạp (chọn) trả về không có bản ghi, bạn không có việc phải làm và nó không đắt hơn nhiều sau đó chỉ kiểm tra sự tồn tại của bản ghi đó. Nếu nó trả về bản ghi, bạn có dữ liệu tiêu đề của bạn được tải và chỉ lưu một truy vấn cơ sở dữ liệu. –