2010-01-25 25 views
35

Tôi đã thử một vài chỉ số và ấn tượng nhưng tôi gần như luôn luôn cần một tối đa hoặc một min là tốt và không thể hiểu tại sao nó không làm việc với những, bất cứ ai có thể giải thích tại sao?Tại sao các chế độ xem được lập chỉ mục không có tổng hợp MAX()?

Tôi BIẾT họ không được phép, tôi không thể hiểu tại sao !!! Đếm vv được cho phép tại sao không phải MIN/MAX, tôi đang tìm kiếm giải thích ...

Trả lời

69

Các tổng hợp này không được phép vì chúng không thể được tính toán lại chỉ dựa trên các giá trị đã thay đổi.

Một số tổng hợp, như COUNT_BIG() hoặc SUM(), có thể được tính toán lại chỉ bằng cách xem dữ liệu đã thay đổi. Chúng được cho phép trong một khung nhìn được lập chỉ mục bởi vì, nếu một giá trị cơ bản thay đổi, tác động của thay đổi đó có thể được tính toán trực tiếp.

Các tổng hợp khác, như MIN()MAX(), không thể được tính toán lại chỉ bằng cách xem dữ liệu đang được thay đổi. Nếu bạn xóa giá trị hiện tại là giá trị cực đại hoặc tối thiểu, thì giá trị tối đa hoặc phút mới phải được tìm kiếm và tìm thấy trong bảng toàn bộ.

Nguyên tắc tương tự áp dụng cho các tập hợp khác, như AVG() hoặc tập hợp biến thể chuẩn. SQL không thể tính lại chúng chỉ từ các giá trị đã thay đổi, nhưng cần phải quét lại toàn bộ bảng để lấy giá trị mới.

+0

Hah, bạn đã đóng đinh nó! –

+0

Chúng có thể được hỗ trợ nếu bạn hạn chế bảng chỉ cho phép các thao tác 'chèn', không phải' cập nhật' hoặc 'xóa'. (Nếu bạn muốn thực hiện một trong số đó, bạn phải bỏ chế độ xem được lập chỉ mục và tạo lại nó sau đó). Rất nhiều bảng chỉ được chèn vào trong thực tế, và sẽ được hưởng lợi từ cách tăng tốc 'max' và truy vấn 'min'. –

2

Các chức năng tổng hợp như MIN/MAX không được hỗ trợ trong chế độ xem được lập chỉ mục. Bạn phải thực hiện MIN/MAX trong truy vấn xung quanh chế độ xem.

Có định nghĩa đầy đủ về nội dung được cho phép và không được phép trong chế độ xem được lập chỉ mục here (SQL 2005).
Trích:

Các AVG, MAX, MIN, STDEV, STDEVP, VAR, hoặc VARP tổng hợp các chức năng. Nếu AVG (biểu thức) được chỉ định trong truy vấn tham chiếu chế độ xem được lập chỉ mục, trình tối ưu hóa có thể thường xuyên tính toán kết quả cần thiết nếu chế độ xem danh sách chứa SUM (biểu thức) và COUNT_BIG (biểu thức). Ví dụ: chế độ xem được lập chỉ mục danh sách SELECT không thể chứa biểu thức AVG (cột1). Nếu danh sách chọn dạng xem chứa các biểu thức SUM (column1) và COUNT_BIG (cột1), SQL Server có thể tính giá trị trung bình cho truy vấn tham chiếu chế độ xem và chỉ định AVG (cột1).

4

Bên cạnh những lý do được chỉ định bởi Remus, cần ít thực tế hơn để hỗ trợ MIN và MAX. Không giống như COUNT() hoặc SUM(), MAX và MIN nhanh để tính toán - tất cả các bạn đều được đặt sau chỉ một lần tra cứu; bạn không cần phải đọc nhiều dữ liệu.

+0

Người đã xuống hạng, bạn có quan tâm không? –

+7

có thể là một người có lý do vững chắc để cần MIN hoặc MAX. Tôi đã tìm thấy câu hỏi này trong khi tìm cách tạo chỉ mục như vậy, vì sẽ mất một truy vấn từ vài phút đến vài giây.Duy trì nó bằng tay có vẻ là giải pháp duy nhất, nhưng nó không phải là một trong những tôi đặc biệt thích ... – jmoreno

Các vấn đề liên quan