Canned answer:
Trong tất cả các-quá-nhiều trường hợp một cái nhìn được lập chỉ mục có thể giải quyết mục tiêu hiệu suất ngắn hạn của bạn, nhưng tại một số thời gian sau đó trở thành phản tác dụng. Vì vậy, nếu bạn chọn sử dụng chế độ xem được lập chỉ mục, bạn có thể cần một chiến lược thoát. Hãy để tôi mô tả một vài vấn đề thường gặp với các khung nhìn được lập chỉ mục.
Chế độ xem được lập chỉ mục có thể làm tăng tranh chấp khóa.
Rất dễ dàng để chứng minh.Tạo bảng sau:
CREATE TABLE dbo.ChildTable(ChildID INT NOT NULL
CONSTRAINT PK_ChildTable PRIMARY KEY,
ParentID INT NOT NULL,
Amount INT NOT NULL);
GO
Từ một tab trong SSMS, chạy kịch bản này:
BEGIN TRAN;
INSERT INTO dbo.ChildTable(ChildID, ParentID, Amount)
VALUES(1,1,1);
Từ tab khác, chạy một tương tự một:
BEGIN TRAN;
INSERT INTO dbo.ChildTable(ChildID, ParentID, Amount)
VALUES(2,1,1);
ROLLBACK;
Lưu ý rằng cả hai chèn hoàn chỉnh , họ không chặn nhau. Tua lại ở cả hai tab và tạo chế độ xem được lập chỉ mục:
CREATE VIEW dbo.ChildTableTotals WITH SCHEMABINDING
AS
SELECT ParentID,
COUNT_BIG(*) AS ChildRowsPerParent,
SUM(Amount) AS SumAmount
FROM dbo.ChildTable
GROUP BY ParentID;
GO
CREATE UNIQUE CLUSTERED INDEX ChildTableTotals_CI
ON dbo.ChildTableTotals(ParentID);
Chạy lại hai lần chèn. Lưu ý rằng điều thứ hai không hoàn thành; nó bị chặn. Lý do rất đơn giản: chèn đầu tiên sửa đổi mục nhập tương ứng trong khung nhìn được lập chỉ mục, do đó, chèn sẽ lấy và giữ một khóa trên đó.
Cũng dễ dàng chứng minh rằng khi bạn tạo chế độ xem được lập chỉ mục, các khóa chết có thể trở nên có nhiều khả năng xảy ra hơn.
Lưu ý: đây không phải là vấn đề với cách xem được lập chỉ mục. Nếu bạn triển khai bảng tóm tắt của riêng mình và phát triển các trình kích hoạt trực tiếp sửa đổi nó để luôn cập nhật, bạn sẽ gặp phải vấn đề tương tự. Chỉ khi bạn không duy trì bảng tóm tắt của bạn tất cả các thời gian, bạn có thể nhận được xung quanh vấn đề này khóa, nhưng một cuộc thảo luận chi tiết hơn về điều này là vượt ra ngoài phạm vi của bài đăng này.
Chỉnh sửa: ví dụ có thể trông giống với bạn, nhưng vấn đề mà nó thể hiện là rất thực tế và rất phổ biến. Chế độ xem được lập chỉ mục trong môi trường OLTP bị hạn chế sử dụng, bởi vì chúng làm tăng nghiêm trọng tranh chấp khóa và gây ra nhiều sự tắc nghẽn. Nó là khá phổ biến mà ai đó tạo ra chúng trong OLTP, nhưng cuối cùng giảm, bởi vì họ giới thiệu nhiều vấn đề hơn họ giải quyết.
Có hai cách phổ biến để chứng minh các sự cố gây ra bởi đồng thời - chúng tôi viết vòng và chạy chúng từ nhiều kết nối hoặc bắt đầu giao dịch rõ ràng trong hai hoặc nhiều kết nối. Tôi khuyến khích mọi người nghĩ ra một cách đơn giản hơn để chứng minh vấn đề này.
Mức độ trễ trong dữ liệu của bạn mà bạn có thể cho phép từ việc nhập các giao dịch vào báo cáo là bao nhiêu? – JeffO
Hãy làm hai kịch bản phổ biến: 1. Về cơ bản lên đến phút hoặc càng sớm càng tốt. 2. Hàng ngày – Saraz
Tôi đã đăng câu hỏi con http://stackoverflow.com/questions/3878603/why-is-the-engagement-of-olap-practically-neglected –