Câu trả lời:
Chúng được gọi là dạng xem được lập chỉ mục trong SQL Server - hãy đọc các tài liệu trắng này để biết thêm thông tin cơ bản:
Về cơ bản, tất cả những gì bạn cần làm là:
và bạn đã hoàn thành!
Phần khó khăn là: chế độ xem phải đáp ứng khá nhiều ràng buộc và hạn chế - những điều này đã được nêu trong sách trắng. Nếu bạn làm điều này - đó là tất cả. Chế độ xem đang được cập nhật tự động, không cần bảo trì.
Các nguồn bổ sung:
Mặc dù hoàn toàn từ góc độ kỹ thuật, các chế độ xem được lập chỉ mục nghe giống như một thứ mà mọi người có thể sử dụng để cải thiện hiệu suất nhưng kịch bản trong cuộc sống thực lại rất khác. Tôi đã không thành công khi sử dụng các chế độ xem được lập chỉ mục ở nơi tôi cần chúng nhất vì có quá nhiều hạn chế về những gì có thể được lập chỉ mục và những gì không thể.
Nếu bạn có các phép nối bên ngoài trong dạng xem, chúng không thể được sử dụng. Ngoài ra, các biểu thức bảng thông thường không được phép ... Trên thực tế, nếu bạn có bất kỳ thứ tự nào trong các danh sách con hoặc bảng dẫn xuất (chẳng hạn như với phân vùng theo mệnh đề), bạn cũng gặp may.
Điều đó chỉ để lại các tình huống rất đơn giản để sử dụng các chế độ xem được lập chỉ mục, theo ý kiến của tôi, điều gì đó có thể được tối ưu hóa bằng cách tạo các chỉ mục thích hợp trên các bảng bên dưới.
Tôi sẽ rất vui khi nghe một số tình huống thực tế trong đó mọi người đã thực sự sử dụng chế độ xem được lập chỉ mục vì lợi ích của họ và không thể làm được nếu không có chúng
(NOEXPAND)
gợi ý cho các truy vấn sử dụng các dạng xem được lập chỉ mục. Và sau đó bạn nhận thấy sự khác biệt. Lợi thế của việc sử dụng các dạng xem được lập chỉ mục so với "lập chỉ mục các bảng đúng cách" là hạn chế việc lựa chọn bản ghi, nếu bạn đúng, nó sẽ giống nhau.
Bạn có thể cần thêm một chút thông tin cơ bản về Chế độ xem Vật liệu hóa thực sự là gì. Trong Oracle, đây là một đối tượng bao gồm một số phần tử khi bạn cố gắng xây dựng nó ở nơi khác.
MVIEW về cơ bản là một ảnh chụp nhanh dữ liệu từ một nguồn khác. Không giống như một dạng xem, dữ liệu không được tìm thấy khi bạn truy vấn dạng xem, nó được lưu trữ cục bộ trong một dạng bảng. MVIEW được làm mới bằng cách sử dụng quy trình nền khởi động theo chu kỳ hoặc khi dữ liệu nguồn thay đổi. Oracle cho phép làm mới toàn bộ hoặc một phần.
Trong SQL Server, tôi sẽ sử dụng phần sau để tạo MVIEW cơ bản để (hoàn thành) làm mới thường xuyên.
Đầu tiên, một góc nhìn. Điều này sẽ dễ dàng đối với hầu hết vì các khung nhìn khá phổ biến trong bất kỳ cơ sở dữ liệu nào Tiếp theo, một bảng. Điều này phải giống với chế độ xem trong cột và dữ liệu. Điều này sẽ lưu trữ ảnh chụp nhanh của dữ liệu chế độ xem. Sau đó, một thủ tục cắt ngắn bảng và tải lại nó dựa trên dữ liệu hiện tại trong dạng xem. Cuối cùng, một công việc kích hoạt quy trình để bắt đầu nó hoạt động.
Mọi thứ khác đều là thử nghiệm.
Khi chế độ xem được lập chỉ mục không phải là một tùy chọn và không cần cập nhật nhanh chóng, bạn có thể tạo bảng hack cache:
select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...
sau đó sp_rename view / table hoặc thay đổi bất kỳ truy vấn nào hoặc các view khác tham chiếu nó để trỏ đến bảng cache.
lên lịch hàng ngày / hàng đêm / hàng tuần / không làm mới như thế nào
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
NB: điều này sẽ ăn gian, cũng như trong nhật ký tx của bạn. Được sử dụng tốt nhất cho các bộ dữ liệu nhỏ có tốc độ tính toán chậm. Có thể refactor để loại bỏ các cột "dễ dàng nhưng lớn" trước tiên vào một khung nhìn bên ngoài.
Đối với MS T-SQL Server, tôi khuyên bạn nên xem xét việc tạo chỉ mục với câu lệnh "include". Tính duy nhất là không bắt buộc, cũng không phải sắp xếp vật lý dữ liệu được liên kết với chỉ mục được phân nhóm. "Chỉ mục ... Bao gồm ()" tạo ra một bộ lưu trữ dữ liệu vật lý riêng được hệ thống tự động duy trì. Về mặt khái niệm, nó rất giống với Chế độ xem Vật liệu hóa của Oracle.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx