Tôi xây dựng các khung nhìn được lập chỉ mục trong SQL Server mọi lúc để điều chỉnh các sản phẩm hiện có. Trình tối ưu hóa đủ thông minh để sử dụng chỉ mục nếu bạn đang sử dụng các cột thích hợp.
Sử dụng ví dụ của bạn, có vẻ như bạn đã tạo chế độ xem nhưng thực tế không tạo chỉ mục cho nó.
if object_id(N'mytable1') is not null
drop table mytable1
if object_id(N'mytable2') is not null
drop table mytable2
go
Create table mytable1 (ID int identity(1,1), Name1 nvarchar(100))
GO
Create table mytable2 (ID int identity(1,1), Name2 nvarchar(100))
GO
insert into mytable1 values ('steve')
insert into mytable1 values ('jack')
insert into mytable1 values ('mike')
insert into mytable1 values ('ralph')
insert into mytable1 values ('simon')
insert into mytable2 values ('smith')
insert into mytable2 values ('jackson')
insert into mytable2 values ('mikaelson')
insert into mytable2 values ('montalvo')
insert into mytable2 values ('singer')
go
if object_id(N'myview') is not null
drop view myview
go
Create view myview
with schemabinding
as
select a.id, a.name1, b.name2
from dbo.mytable1 a
join dbo.mytable2 b on a.Id = b.Id
GO
select a.name1, b.name2
from mytable1 a join mytable2 b on a.Id = b.Id
GO
Vì không có chỉ mục trên chế độ xem này, chúng tôi quét trên các bảng cơ sở:
Nhưng một khi chúng ta thêm một chỉ mục, trình tối ưu hóa có thể sử dụng nó:
CREATE UNIQUE CLUSTERED INDEX [ix_cl_names] ON [myview]
(
[name1] ASC,
[name2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Điều này được sử dụng một cách thích hợp quan điểm:
Tôi không thể thay đổi tất cả các tập lệnh SQL của mình để chọn từ chế độ xem thay vì bảng. Tôi muốn tạo các khung nhìn được lập chỉ mục và buộc SQL Server lấy dữ liệu từ chúng thay vì các bảng.
Không có gợi ý hoặc phương pháp nào khác để buộc SQL Server sử dụng chế độ xem được lập chỉ mục khi nó không được tham chiếu trong truy vấn.
Thông tin bổ sung (từ Geoff Patterson )
Một điểm nữa là trong khi trình tối ưu hóa có thể, chỉ trong Phiên bản doanh nghiệp, sử dụng chế độ xem được lập chỉ mục trong trường hợp này, có thể có ý nghĩa trực tiếp tham chiếu chế độ xem bằng cách sử dụng NOEXPAND
gợi ý nếu bạn cần chắc chắn 100% về chỉ mục chế độ xem được sử dụng hoặc nếu bạn muốn nó được sử dụng trong Standard Edition.
Tôi thường thấy các truy vấn ngay cả trong Phiên bản doanh nghiệp nơi trình tối ưu hóa không nhận thấy thực tế là chỉ mục xem có thể được sử dụng trừ khi NOEXPAND
được sử dụng. Nó phổ biến hơn với các truy vấn phức tạp, nhưng cũng có thể xảy ra với các truy vấn đơn giản.
Paul White có một trong những bài viết hay hơn mà tôi đã đọc khám phá các sắc thái của NOEXPAND
; ngoài việc sử dụng chỉ mục chế độ xem, gợi ý còn có thể tác động đến những thứ như liệu số liệu thống kê có được tạo tự động trên chế độ xem được lập chỉ mục và ước tính số lượng thẻ cho kế hoạch hay không.
Và từ Zane : Là một lưu ý phụ, hãy cẩn thận với các chế độ xem được lập chỉ mục như mọi chỉ mục khác, nó sẽ thêm vào bản cập nhật, chèn và xóa thời gian của bạn.