Tôi đang điều tra bằng cách sử dụng READPAST
gợi ý để giảm việc khóa tài nguyên trong hệ thống con tài chính của ứng dụng của chúng tôi.
Có vẻ như là một cách tốt để đi vì hồ sơ giao dịch tài chính chỉ được thêm vào, không bao giờ được cập nhật hoặc xóa. Các hàng duy nhất từng bị bỏ qua là các hàng hoàn toàn mới được chèn bên trong giao dịch; họ thực sự không tồn tại với thế giới bên ngoài cho đến khi giao dịch được thực hiện.
Tuy nhiên, tôi nhận thấy hiệu suất kém hơn đối với các truy vấn sử dụng các chế độ xem được lập chỉ mục mà tôi đã đưa ra READPAST
gợi ý. So sánh các kế hoạch truy vấn, có vẻ như với gợi ý, trình tối ưu hóa truy vấn chọn không sử dụng chế độ xem được lập chỉ mục và thay vào đó lại quay lại coi nó như một chế độ xem thông thường.
Tôi không chắc tại sao lại như vậy; Tôi tưởng tượng các khung nhìn được lập chỉ mục giống như bất kỳ chỉ mục nào khác trong đó các khóa có thể bị khóa trong các hoạt động và việc thêm READPAST
sẽ hoạt động tương tự.
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST)
WHERE isa.TotalOwedAmount = 0.0
SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa
WHERE isa.TotalOwedAmount = 0.0
Thêm một NOEXPAND
gợi ý cũng có vẻ hiệu quả, nhưng tôi quan tâm đến việc tìm hiểu thêm về lý do có thể READPAST
khiến trình tối ưu hóa truy vấn đưa ra lựa chọn đó ngay từ đầu (như một phần của câu trả lời đầy đủ).