Cập nhật một chế độ xem được lập chỉ mục trực tuyến


7

Nói rằng tôi có một chế độ xem được lập chỉ mục giống như thế này:

ALTER VIEW dbo.MyIndexedView WITH SCHEMABINDING
AS 
    SELECT ord.SomeColumn, COUNT_BIG(*) AS Count
    FROM dbo.Ordered ord
    WHERE ord.CreatedWhen >  CONVERT(DATETIME, '2014-11-01', 121)
    GROUP BY ord.SomeColumn
GO

CREATE UNIQUE CLUSTERED INDEX [CIX_MyIndexedView] ON dbo.MyIndexedView (SomeColumn)
GO

Nếu tôi thay đổi giá trị thời gian ngày trong chế độ xem này (nói là '2014-11-01') thì chỉ mục cụm cần phải được tạo lại.

Có cách nào để chế độ xem và chỉ mục hiện tại có hiệu lực cho đến khi chế độ xem hoàn toàn mới được xây dựng và sau đó trao đổi chúng không? Tương tự nhưOnline=On

Câu trả lời:


8

Đây là cách tôi sẽ làm điều đó. Đầu tiên, tạo một vài lược đồ dự phòng:

CREATE SCHEMA HoldingTank AUTHORIZATION dbo;
CREATE SCHEMA Swapper AUTHORIZATION dbo;

Bây giờ, khi đến lúc làm mới khung nhìn và thay đổi vị từ bộ lọc, hãy tạo nó trong HoldingTanklược đồ:

CREATE VIEW HoldingTank.MyIndexedView
WITH SCHEMABINDING
AS
  SELECT ...
GO

CREATE UNIQUE CLUSTERED INDEX [CIX_MyIndexedView]
ON HoldingTank.MyIndexedView(SomeColumn);

Bây giờ, bắt đầu một giao dịch, và trao đổi các đối tượng.

BEGIN TRANSACTION;
  ALTER SCHEMA Swapper TRANSFER dbo.MyIndexedView;
  ALTER SCHEMA dbo TRANSFER HoldingTank.MyIndexedView;
COMMIT TRANSACTION;

Sau đó, bạn có thể bỏ bản sao cũ của chế độ xem từ Swapper:

DROP VIEW Swapper.MyIndexedView;

Tôi đi vào chi tiết hơn về giải pháp này trong các bài đăng trên blog này:

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.