Trong ngữ cảnh khóa, các bảng và các chỉ mục liên quan của chúng là các thực thể riêng biệt. Đôi khi, khóa chết xảy ra giữa một bảng và chỉ mục của nó, thay vì giữa hai bảng riêng biệt.
Sự cố rất có thể xảy ra khi một khóa được yêu cầu trên một chỉ mục và sau đó một khóa khác được yêu cầu trên bảng liên quan (tức là thanh) để thực hiện tra cứu dữ liệu. Trong quá trình chèn, điều này sẽ xảy ra theo thứ tự ngược lại. Đầu tiên, bảng (tức là thanh) bị khóa và cập nhật, sau đó các chỉ mục sẽ bị khóa.
select foo
from bar
where @someId = 0 OR SomeId = @someId
Bạn có / bạn có thể thêm một chỉ mục bao quát (để giúp chọn) có chứa cả SomeId và foo không? Bằng cách này, bạn sẽ tránh được hoàn toàn việc tra cứu và ngăn sự cố xảy ra.
Bạn có thể đăng các kế hoạch truy vấn thay vì các khung bế tắc không?