Trong SQL Server 2008 tôi có một cái nhìn V
trên bảng A
và B
trông gần nhưSQL Server biết cách khóa các đối tượng xem?
create view V as
select * from A
union all
select * from B
Đọc từ V
gây ra một truy vấn để lấy khóa chia sẻ ý định trên các bảng cơ sở, nhưng cũng phải mất một khóa chia sẻ ý định trên đối tượng xem. Rõ ràng lý do tại sao chúng ta cần các khóa IS trên các bảng và chúng ta có thể thấy rằng khóa IS trên khung nhìn ngăn không cho sửa đổi đồng thời với các bảng nằm bên dưới khung nhìn. Đó là tốt.
Gói truy vấn không chứa đề cập đến chế độ xem. Nó hoàn toàn được biên dịch, và kế hoạch kết quả trong trường hợp này là một phép nối đơn giản các hàng từ hai bảng cơ sở. Thật vậy, đề cập duy nhất về khung nhìn trong XML kế hoạch truy vấn nằm trong văn bản câu lệnh.
Nếu bạn thêm chế độ xem thứ hai U
qua các bảng, hãy đọc từ V
không gây ra bất kỳ khóa nào được thực hiện trên U
. Quy tắc này cho biết động cơ chỉ cần khóa IS trên tất cả các chế độ xem trên A
và B
.
Làm cách nào để cơ sở dữ liệu biết khóa trên chế độ xem?
- Văn bản câu lệnh có được phân tích cú pháp lần nữa không?
- Có một số kênh thông tin khác giữa trình lập kế hoạch truy vấn và thực thi cơ bản để chuyển thông tin này không?
Xem corresponding question on dba.stackexchange
để biết thêm chi tiết.
Có lẽ nó bắt đầu bằng cách khóa chế độ xem để ngăn thay đổi thiết kế cho chế độ xem trong khi đang được sử dụng. – JamieSee
@JamieSee, nó sẽ mất một S od Sch-M khóa, sau đó. – usr
Gói thực hiện được lưu trữ ở định dạng nhị phân. Không phải mọi thứ mà nó chứa đều được thể hiện trong XML được hiển thị cho chúng tôi. –