Tại sao mọi người khuyên không nên cập nhật thông qua lượt xem


8

Trong thời gian học đại học, nó đã đập vào đầu chúng tôi để không cập nhật bảng thông qua các lượt xem và một lần nữa khi tôi vào nơi làm việc, chúng tôi đã nói không cập nhật cơ sở dữ liệu thông qua các lượt xem.

Ở đâu / Có ý nghĩa hiệu suất đáng kể để làm điều này? Hay đây là một trường hợp của các nhà phát triển / DBA cao cấp nói với nhân viên cấp dưới không được làm điều này bởi vì họ có thể vô tình phá hoại với sự tham gia không chính xác.

EDIT
Tôi đang sử dụng MSSQL 2000-2008 (Tùy thuộc vào chi tiết của khách hàng)


DBMS nào bạn đang sử dụng?
a_horse_with_no_name

@a_horse_with_no_name Đã cập nhật để chỉ ra DBMS. Tôi đã hy vọng rằng câu trả lời sẽ khá chung chung trên tất cả các DBMS '. Có phải tôi đã ngây thơ?
Tim Sparg

Bạn đang nói về các chế độ xem có thể cập nhật tự nhiên hoặc các chế độ xem mà bạn sẽ phải viết trình INSTEAD OFkích hoạt? Tôi chưa từng nghe lời khuyên này, đặc biệt là BTW, bạn có bao giờ đưa ra lý do không?
Martin Smith

@TimSparg: nó phụ thuộc vào cách xem được thực hiện cập nhật. Nếu instead ofkích hoạt được sử dụng, thì không có sự mơ hồ và tôi không thấy lý do để không sử dụng chúng. Nhưng tôi không quen với SQL Server nên tôi không thể nhận xét về việc sử dụng các khung nhìn mà không có trình kích hoạt.
a_horse_with_no_name

@Martin Smith Tôi đang nói về quan điểm cập nhật tự nhiên. Tôi đã mơ hồ nói rằng có những cạm bẫy và các vấn đề về hiệu suất, điều này sau đó được củng cố tại nơi làm việc của tôi là nơi chúng tôi bảo chắc chắn không cập nhật thông qua các lượt xem. Tôi bắt đầu nghĩ rằng đó chỉ là điều mà các Dev / DBA cao cấp sẽ nói bởi vì họ không muốn giải thích về việc cập nhật thông qua các lượt xem (IE bên trong so với tham gia bên ngoài)
Tim Sparg

Câu trả lời:


10

Để chế độ xem có thể cập nhật mà không cần sử dụng INSTEAD OFkích hoạt "SQL Server phải có thể theo dõi rõ ràng các sửa đổi từ định nghĩa chế độ xem sang một bảng cơ sở." .

Không có bất lợi về hiệu suất khi Cập nhật các Chế độ xem này vì SQL Server sẽ chỉ tạo ra một kế hoạch truy vấn cho bảng cơ sở bị ảnh hưởng. Một nhược điểm có thể xảy ra là nó có thêm một lớp che giấu, vì vậy trừ khi bạn đang sử dụng Chế độ xem làm lớp bảo mật, việc viết mã cập nhật bảng cơ sở trực tiếp sẽ rõ ràng hơn.

Một cái khác có thể là nếu Chế độ xem chứa một thành nhiều JOINvà bạn cập nhật bên "một" với giá trị từ phía "nhiều" thì không xác định được kết quả mà bạn kết thúc nhưng cũng áp dụng tương tự với UPDATE ... FROMcú pháp độc quyền của SQL Server . Bạn sẽ cần sử dụng MERGEhoặc truy vấn phụ tương quan vô hướng để tránh vấn đề có thể xảy ra.

Đối với các Chế độ xem không thể cập nhật và yêu cầu INSTEAD OFkích hoạt, có các hàm ý hiệu suất vì các bảng giả inserteddeletedcần phải được tạo từ bảng cơ sở để nếu có thể cập nhật trực tiếp các bảng cơ sở sẽ có hiệu quả hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.