gợi ý không giới hạn cho phiên bản và hiệu suất không enterpise


11

Tôi phải sử dụng các khung nhìn được lập chỉ mục để đạt được hiệu suất. Như tôi có thể thấy từ bảng so sánh phiên bản tiêu chuẩn này không hỗ trợ các khung nhìn được lập chỉ mục. Nhưng BOL nói:

Các khung nhìn được lập chỉ mục có thể được tạo trong bất kỳ phiên bản SQL Server nào. Trong SQL Server Enterprise, trình tối ưu hóa truy vấn sẽ tự động xem xét chế độ xem được lập chỉ mục. Để sử dụng chế độ xem được lập chỉ mục trong tất cả các phiên bản khác, phải sử dụng gợi ý bảng NOEXPAND.

Nó cũng sẽ hoạt động (tôi đang nói về hiệu suất)

select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)

trên phiên bản SQL Server Standard cũng như nó hoạt động

select * from dbo.OrderTotals

trên doanh nghiệp một?

Đây là mã để xem:

CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select 
    OrderId     =   r.OrderId                   
  , TotalQty            =   SUM(r.Quantity)
  , TotalGrossConsid    =   SUM(r.Price * r.Quantity)
  , XCount      =   COUNT_BIG(*)
from dbo.Order r
group by r.OrderId

CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)

Câu trả lời:


13

Sự khác biệt là phiên bản Enterprise không có gợi ý có thể quyết định không sử dụng chế độ xem được lập chỉ mục mà thay vào đó là các bảng cơ sở.

Kinh nghiệm cá nhân của tôi là SQL Server có phần dũng cảm trong việc này. Tôi hầu như luôn phải sử dụng gợi ý: truy vấn nhanh hơn với IO ít hơn rất nhiều mặc dù kế hoạch "có vẻ" tệ hơn với việc quét trên chế độ xem không chỉ mục tìm kiếm trên các bảng cơ sở. Và nó cũng chạy ổn định hơn

YMMV tất nhiên :-)

Vì vậy, để trả lời, nó sẽ (nên?) Hoạt động tương tự dựa trên những gì tôi đã thấy. Dân gian khác có thể có kinh nghiệm khác nhau và tôi quan tâm đến câu trả lời khác

Để tránh sử dụng gợi ý ở mọi nơi, bạn có thể bao bọc chế độ xem được lập chỉ mục trong chế độ xem khác bằng gợi ý: gợi ý truyền vào bên trong cho tất cả các truy vấn bên ngoài sẽ tự động có NOEXPAND.


Tôi đã nhận được "Gợi ý chỉ mục không thể được chỉ định trong một đối tượng ràng buộc lược đồ" khi cố gắng tạo chế độ xem bên ngoài với lược đồ như select * từ OrderTotals với (noExand, index = IXCU_xxx). :)
garik

2
@garik: Tôi chỉ có NOEXPAND, không phải gợi ý về chỉ số. Dù sao chỉ có một chỉ mục: nó được nhóm lại để quét bảng = quét chỉ mục
gbn

không thảo luận. đã đóng :)
garik

Woaaa ... nhúng NOEXPAND ... Thông minh, luv nó ...
Jérôme Verstrynge
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.