Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Bảo trì Chế độ xem được Lập chỉ mục trong Kế hoạch Thực thi

Mặc dù chúng đi kèm với nhiều hạn chế và một số cảnh báo triển khai quan trọng, các dạng xem được lập chỉ mục vẫn là một tính năng SQL Server rất mạnh khi được sử dụng đúng cách trong các trường hợp phù hợp. Một cách sử dụng phổ biến là cung cấp chế độ xem tổng hợp trước về dữ liệu cơ bản, mang đến cho người dùng khả năng truy vấn kết quả trực tiếp mà không phải chịu chi phí xử lý các phép nối, bộ lọc và tổng hợp cơ bản mỗi khi truy vấn được thực thi.

Mặc dù các tính năng mới của Enterprise Edition như lưu trữ dạng cột và xử lý chế độ hàng loạt đã thay đổi các đặc tính hiệu suất của nhiều truy vấn lớn thuộc loại này, nhưng vẫn không có cách nào nhanh hơn để có được kết quả hơn là tránh hoàn toàn tất cả các xử lý cơ bản, bất kể việc xử lý đó hiệu quả đến mức nào. có thể đã trở thành.

Trước khi các chế độ xem được lập chỉ mục (và những người anh em họ hạn chế hơn của chúng, các cột được tính toán) được thêm vào sản phẩm, các chuyên gia cơ sở dữ liệu đôi khi sẽ viết mã đa kích hoạt phức tạp để trình bày kết quả của một truy vấn quan trọng trong một bảng thực. Kiểu sắp xếp này nổi tiếng là khó thực hiện đúng trong mọi trường hợp, đặc biệt khi các thay đổi đồng thời đối với dữ liệu cơ bản thường xuyên xảy ra.

Tính năng chế độ xem được lập chỉ mục làm cho tất cả điều này trở nên dễ dàng hơn nhiều, khi nó được áp dụng một cách hợp lý và chính xác. Công cụ cơ sở dữ liệu xử lý mọi thứ cần thiết để đảm bảo dữ liệu đọc từ chế độ xem được lập chỉ mục khớp với truy vấn cơ bản và dữ liệu bảng tại mọi thời điểm.

Bảo trì gia tăng

SQL Server giữ cho dữ liệu dạng xem được lập chỉ mục được đồng bộ hóa với truy vấn cơ bản bằng cách tự động cập nhật các chỉ mục dạng xem một cách thích hợp bất cứ khi nào dữ liệu thay đổi trong các bảng cơ sở. Chi phí của hoạt động bảo trì này do quá trình thay đổi dữ liệu cơ sở. Các thao tác bổ sung cần thiết để duy trì chỉ mục chế độ xem được thêm vào kế hoạch thực thi cho thao tác chèn, cập nhật, xóa hoặc hợp nhất ban đầu. Trong nền, SQL Server cũng xử lý các vấn đề phức tạp hơn liên quan đến cách ly giao dịch, chẳng hạn như đảm bảo xử lý chính xác các giao dịch đang chạy dưới chế độ chụp nhanh hoặc đọc cách ly ảnh chụp nhanh đã cam kết.

Việc xây dựng các hoạt động kế hoạch thực thi bổ sung cần thiết để duy trì các chỉ mục chế độ xem một cách chính xác không phải là vấn đề nhỏ, vì bất kỳ ai đã cố gắng triển khai "bảng tóm tắt được duy trì bằng mã kích hoạt" sẽ biết. Sự phức tạp của nhiệm vụ là một trong những lý do khiến các chế độ xem được lập chỉ mục có rất nhiều hạn chế. Giới hạn diện tích bề mặt được hỗ trợ đối với các phép nối bên trong, phép chiếu, vùng chọn (bộ lọc) và các tổng hợp SUM và COUNT_BIG làm giảm đáng kể độ phức tạp của việc triển khai.

Chế độ xem được lập chỉ mục được duy trì tăng dần . Điều này có nghĩa là bộ xử lý truy vấn xác định ảnh hưởng thực của các thay đổi trong bảng cơ sở đối với chế độ xem và chỉ áp dụng những thay đổi cần thiết để cập nhật chế độ xem. Trong những trường hợp đơn giản, nó có thể tính toán các delta cần thiết chỉ từ các thay đổi của bảng cơ sở và dữ liệu hiện được lưu trữ trong dạng xem. Trong trường hợp định nghĩa dạng xem chứa các phép nối, thì phần bảo trì dạng xem được lập chỉ mục của kế hoạch thực thi cũng sẽ cần truy cập vào các bảng đã nối, nhưng điều này thường có thể được thực hiện một cách hiệu quả, với các chỉ mục bảng cơ sở thích hợp.

Để đơn giản hóa việc triển khai hơn nữa, SQL Server luôn sử dụng cùng một hình dạng sơ đồ cơ bản (làm điểm bắt đầu) để triển khai các hoạt động bảo trì chế độ xem được lập chỉ mục. Các phương tiện thông thường được cung cấp bởi trình tối ưu hóa truy vấn được sử dụng để đơn giản hóa và tối ưu hóa hình dạng bảo trì tiêu chuẩn khi thích hợp. Bây giờ chúng ta sẽ chuyển sang một ví dụ để giúp kết hợp các khái niệm này lại với nhau.

Ví dụ 1 - Chèn hàng đơn

Giả sử chúng ta có bảng đơn giản và chế độ xem được lập chỉ mục sau:

CREATE TABLE dbo.T1 
(
    GroupID integer NOT NULL, 
    Value   integer NOT NULL
);
GO
INSERT dbo.T1
    (GroupID, Value)
VALUES
    (1, 1),
    (1, 2),
    (2, 3),
    (2, 4),
    (2, 5);
GO
CREATE VIEW dbo.IV
WITH SCHEMABINDING
AS
SELECT
    T1.GroupID, 
    SumValue = SUM(T1.Value),
    NumRows = COUNT_BIG(*)
FROM dbo.T1 AS T1
WHERE
    T1.GroupID BETWEEN 1 AND 5
GROUP BY 
    T1.GroupID;
GO
CREATE UNIQUE CLUSTERED INDEX cuq
ON dbo.IV (GroupID);

Sau khi tập lệnh đó được chạy, dữ liệu trong bảng mẫu trông giống như sau:

Và dạng xem được lập chỉ mục chứa:

Ví dụ đơn giản nhất về kế hoạch bảo trì chế độ xem được lập chỉ mục cho thiết lập này xảy ra khi chúng tôi thêm một hàng vào bảng cơ sở:

INSERT dbo.T1
    (GroupID, Value)
VALUES
    (3, 6);

Kế hoạch thực hiện cho phụ trang này được hiển thị bên dưới:

Theo các số trong sơ đồ, hoạt động của kế hoạch thực hiện này diễn ra như sau:

  1. Toán tử Chèn bảng thêm hàng mới vào bảng cơ sở. Đây là toán tử kế hoạch duy nhất được liên kết với chèn bảng cơ sở; tất cả các toán tử còn lại quan tâm đến việc duy trì chế độ xem được lập chỉ mục.
  2. Bộ đệm bảng Eager lưu dữ liệu hàng đã chèn vào bộ nhớ tạm thời.
  3. Toán tử Trình tự đảm bảo nhánh trên cùng của kế hoạch chạy đến hoàn thành trước khi nhánh tiếp theo trong Trình tự được kích hoạt. Trong trường hợp đặc biệt này (chèn một hàng duy nhất), sẽ hợp lệ để loại bỏ Trình tự (và các cuộn ở vị trí 2 và 4), kết nối trực tiếp đầu vào Tổng hợp luồng với đầu ra của Chèn bảng. Tính năng tối ưu hóa có thể có này không được triển khai, vì vậy Trình tự và Spools vẫn còn.
  4. Bộ đệm của Bảng Eager này được liên kết với bộ đệm ở vị trí 2 (nó có thuộc tính ID Node Chính cung cấp liên kết này một cách rõ ràng). Ống đệm phát lại các hàng (một hàng trong trường hợp hiện tại) từ cùng một bộ lưu trữ tạm thời được ghi bởi ống đệm chính. Như đã đề cập ở trên, các cuộn và vị trí 2 và 4 là không cần thiết và có tính năng đơn giản vì chúng tồn tại trong mẫu chung để duy trì chế độ xem được lập chỉ mục.
  5. Tổng hợp Luồng tính toán tổng dữ liệu cột Giá trị trong tập hợp được chèn và đếm số hàng có trên mỗi nhóm khóa chế độ xem. Đầu ra là dữ liệu gia tăng cần thiết để giữ cho chế độ xem được đồng bộ hóa với dữ liệu cơ sở. Lưu ý, Tổng hợp Luồng không có phần tử Nhóm Theo vì trình tối ưu hóa truy vấn chỉ biết một giá trị duy nhất đang được xử lý. Tuy nhiên, trình tối ưu hóa không áp dụng logic tương tự để thay thế các tổng hợp bằng các phép chiếu (tổng của một giá trị chỉ là giá trị của chính nó và số lượng sẽ luôn là một cho một lần chèn hàng). Tính toán tổng và đếm tổng cho một hàng dữ liệu không phải là một thao tác tốn kém, vì vậy việc tối ưu hóa bị bỏ sót này không đáng quan tâm.
  6. Phép nối liên quan từng thay đổi gia tăng được tính toán với một khóa hiện có trong chế độ xem được lập chỉ mục. Phép nối là phép nối bên ngoài vì dữ liệu mới được chèn vào có thể không tương ứng với bất kỳ dữ liệu hiện có nào trong chế độ xem.
  7. Toán tử này định vị hàng cần sửa đổi trong chế độ xem.
  8. Compute Scalar có hai trách nhiệm quan trọng. Đầu tiên, nó xác định xem mỗi thay đổi gia tăng sẽ ảnh hưởng đến hàng hiện có trong dạng xem hay phải tạo một hàng mới. Nó thực hiện điều này bằng cách kiểm tra xem liệu phép nối bên ngoài có tạo ra giá trị rỗng từ phía chế độ xem của phép nối hay không. Chèn mẫu của chúng tôi dành cho nhóm 3, nhóm này hiện không tồn tại trong chế độ xem, vì vậy một hàng mới sẽ được tạo. Chức năng thứ hai của Compute Scalar là tính toán các giá trị mới cho các cột khung nhìn. Nếu một hàng mới được thêm vào chế độ xem, đây chỉ đơn giản là kết quả của tổng tăng dần từ Tổng hợp luồng. Nếu một hàng hiện có trong chế độ xem cần được cập nhật thì giá trị mới là giá trị hiện có trong hàng chế độ xem cộng với tổng tăng dần từ Tổng số luồng.
  9. Bộ đệm Bảng Eager này dành cho Bảo vệ Halloween. Nó được yêu cầu về tính đúng đắn khi thao tác chèn ảnh hưởng đến bảng cũng được tham chiếu ở phía truy cập dữ liệu của truy vấn. Về mặt kỹ thuật, không bắt buộc nếu thao tác bảo trì một hàng dẫn đến cập nhật cho một hàng chế độ xem hiện có, nhưng dù sao thì hàng đó vẫn nằm trong kế hoạch.
  10. Toán tử cuối cùng trong kế hoạch được gắn nhãn là toán tử Cập nhật, nhưng nó sẽ thực hiện Chèn hoặc Cập nhật cho mỗi hàng mà nó nhận được tùy thuộc vào giá trị của cột "mã hành động" được thêm bởi Tính toán vô hướng tại nút 8 . Nhìn chung, toán tử cập nhật này có khả năng chèn, cập nhật và xóa.

Có khá nhiều chi tiết ở đó, vì vậy để tóm tắt:

  • Dữ liệu nhóm tổng hợp thay đổi theo khóa nhóm duy nhất của chế độ xem. Nó tính toán hiệu ứng thực của những thay đổi của bảng cơ sở trên mỗi cột trên mỗi khóa.
  • Kết nối bên ngoài kết nối các thay đổi gia tăng theo từng phím với các hàng hiện có trong chế độ xem.
  • Tính toán vô hướng tính toán xem nên thêm một hàng mới vào dạng xem hay một hàng hiện có được cập nhật. Nó tính toán các giá trị cột cuối cùng cho thao tác chèn hoặc cập nhật chế độ xem.
  • Toán tử cập nhật chế độ xem sẽ chèn một hàng mới hoặc cập nhật hàng hiện có theo chỉ dẫn của mã hành động.

Ví dụ 2 - Chèn nhiều hàng

Tin hay không thì tùy, kế hoạch thực thi chèn bảng cơ sở một hàng được thảo luận ở trên phải tuân theo một số đơn giản hóa. Mặc dù một số tối ưu hóa có thể có đã bị bỏ qua (như đã lưu ý), trình tối ưu hóa truy vấn vẫn quản lý để loại bỏ một số thao tác khỏi mẫu bảo trì chế độ xem được lập chỉ mục chung và giảm độ phức tạp của các thao tác khác.

Một số tối ưu hóa này đã được cho phép vì chúng tôi chỉ chèn một hàng duy nhất, nhưng những tối ưu hóa khác đã được bật vì trình tối ưu hóa có thể thấy các giá trị theo nghĩa đen được thêm vào bảng cơ sở. Ví dụ:trình tối ưu hóa có thể thấy rằng giá trị nhóm được chèn vào sẽ chuyển vị từ trong mệnh đề WHERE của chế độ xem.

Nếu bây giờ chúng ta chèn hai hàng, với các giá trị "ẩn" trong các biến cục bộ, chúng ta sẽ có một kế hoạch phức tạp hơn một chút:

DECLARE
    @Group1 integer = 4,
    @Value1 integer = 7,
    @Group2 integer = 5,
    @Value2 integer = 8;
 
INSERT dbo.T1
    (GroupID, Value)
VALUES
    (@Group1, @Value1),
    (@Group2, @Value2);

Các toán tử mới hoặc đã thay đổi được chú thích như trước:

  1. Quét liên tục cung cấp các giá trị để chèn. Trước đây, một tối ưu hóa cho chèn một hàng đã cho phép bỏ qua toán tử này.
  2. Toán tử Bộ lọc rõ ràng hiện được yêu cầu để kiểm tra xem các nhóm được chèn vào bảng cơ sở có khớp với mệnh đề WHERE trong dạng xem hay không. Khi điều đó xảy ra, cả hai hàng mới sẽ vượt qua bài kiểm tra, nhưng trình tối ưu hóa không thể nhìn thấy các giá trị trong các biến để biết trước điều này. Ngoài ra, sẽ không an toàn khi lưu vào bộ nhớ cache một kế hoạch đã bỏ qua bộ lọc này vì việc tái sử dụng kế hoạch trong tương lai có thể có các giá trị khác nhau trong các biến.
  3. Giờ đây, cần có Sắp xếp để đảm bảo các hàng đến Tổng hợp luồng theo thứ tự nhóm. Việc sắp xếp trước đây đã bị loại bỏ vì việc sắp xếp một hàng là vô nghĩa.
  4. Tổng hợp Luồng hiện có thuộc tính "nhóm theo", khớp với khóa được phân nhóm duy nhất của chế độ xem.
  5. Sắp xếp này là bắt buộc để trình bày các hàng theo thứ tự mã hành động, khóa xem, được yêu cầu cho hoạt động chính xác của toán tử Thu gọn. Sort là một toán tử chặn hoàn toàn, vì vậy không còn cần đến Bộ đệm Bảng Háo hức để Bảo vệ Halloween nữa.
  6. Toán tử Thu gọn mới kết hợp chèn và xóa liền kề trên cùng một giá trị khóa vào một thao tác cập nhật duy nhất. Toán tử này thực sự không bắt buộc trong trường hợp này, vì không thể tạo mã hành động xóa (chỉ chèn và cập nhật). Đây dường như là một sự giám sát, hoặc có thể là thứ gì đó bị bỏ lại vì lý do an toàn. Các phần được tạo tự động của kế hoạch truy vấn cập nhật có thể trở nên cực kỳ phức tạp, vì vậy khó có thể biết chắc chắn.

Các thuộc tính của Bộ lọc (bắt nguồn từ mệnh đề WHERE của chế độ xem) là:

Tổng hợp Luồng nhóm theo phím xem và tính tổng và đếm các tổng hợp cho mỗi nhóm:

Phạm vi tính toán xác định hành động cần thực hiện trên mỗi hàng (chèn hoặc cập nhật trong trường hợp này) và tính toán giá trị để chèn hoặc cập nhật trong dạng xem:

Mã hành động có nhãn biểu thức là [Act1xxx]. Các giá trị hợp lệ là 1 cho bản cập nhật, 3 cho lần xóa và 4 cho phần chèn. Biểu thức hành động này dẫn đến một lần chèn (mã 4) nếu không tìm thấy hàng phù hợp nào trong dạng xem (tức là phép nối bên ngoài trả về giá trị rỗng cho cột NumRows). Nếu tìm thấy một hàng phù hợp, mã hành động là 1 (cập nhật).

Lưu ý rằng NumRows là tên được đặt cho cột COUNT_BIG (*) bắt buộc trong chế độ xem. Trong một kế hoạch có thể dẫn đến việc xóa khỏi chế độ xem, Phạm vi tính toán sẽ phát hiện khi nào giá trị này trở thành 0 (không có hàng cho nhóm hiện tại) và tạo mã hành động xóa (3).

Các biểu thức còn lại duy trì tổng và đếm các tổng trong dạng xem. Lưu ý rằng các nhãn biểu thức [Expr1009] và [Expr1010] không phải là mới; chúng tham chiếu đến các nhãn được tạo bởi Tổng hợp luồng. Logic rất đơn giản:nếu không tìm thấy hàng phù hợp, giá trị mới để chèn chỉ là giá trị được tính toán tại tổng hợp. Nếu tìm thấy một hàng phù hợp trong chế độ xem, thì giá trị được cập nhật là giá trị hiện tại trong hàng đó cộng với số gia được tính toán bởi tổng thể.

Cuối cùng, toán tử cập nhật chế độ xem (được hiển thị dưới dạng Cập nhật chỉ mục theo cụm trong SSMS) hiển thị tham chiếu cột hành động ([Act1013] được xác định bởi Compute Scalar):

Ví dụ 3 - Cập nhật nhiều hàng

Cho đến nay chúng ta mới chỉ xem xét các phần chèn vào bảng cơ sở. Các kế hoạch thực hiện cho việc xóa rất giống nhau, chỉ có một số khác biệt nhỏ trong các tính toán chi tiết. Do đó, ví dụ tiếp theo này chuyển sang xem xét kế hoạch bảo trì cho bản cập nhật bảng cơ sở:

DECLARE 
    @Group1 integer = 1,
    @Group2 integer = 2,
    @Value integer = 1;
 
UPDATE dbo.T1
SET Value = Value + @Value
WHERE GroupID IN (@Group1, @Group2);

Như trước đây, truy vấn này sử dụng các biến để ẩn các giá trị theo nghĩa đen khỏi trình tối ưu hóa, ngăn việc áp dụng một số đơn giản hóa. Cũng cần cẩn thận cập nhật hai nhóm riêng biệt, ngăn chặn các tối ưu hóa có thể được áp dụng khi trình tối ưu hóa biết chỉ một nhóm (một hàng duy nhất của chế độ xem được lập chỉ mục) sẽ bị ảnh hưởng. Dưới đây là kế hoạch thực thi có chú thích cho truy vấn cập nhật:

Những thay đổi và điểm quan tâm là:

  1. Toán tử Tách mới biến mỗi bản cập nhật hàng của bảng cơ sở thành một thao tác xóa và chèn riêng biệt. Mỗi hàng cập nhật được chia thành hai hàng riêng biệt, nhân đôi số hàng sau thời điểm này trong kế hoạch. Phân tách là một phần của mô hình phân tách-sắp xếp-thu gọn cần thiết để bảo vệ khỏi các lỗi vi phạm khóa duy nhất tạm thời không chính xác.
  2. Tổng hợp Luồng được sửa đổi để tính đến các hàng đến có thể chỉ định xóa hoặc chèn (do Phân tách và được xác định bởi cột mã hành động trong hàng). Một hàng chèn đóng góp giá trị ban đầu trong tổng các tổng hợp; dấu hiệu được đảo ngược đối với các hàng hành động xóa. Tương tự, tổng số hàng ở đây đếm các hàng chèn là +1 và xóa các hàng dưới dạng –1.
  3. Logic Scalar tính toán cũng được sửa đổi để phản ánh rằng tác động thực của các thay đổi đối với mỗi nhóm có thể yêu cầu hành động chèn, cập nhật hoặc xóa cuối cùng đối với chế độ xem cụ thể hóa. Trên thực tế, truy vấn cập nhật cụ thể này không thể dẫn đến việc chèn hoặc xóa một hàng đối với chế độ xem này, nhưng logic cần thiết để suy ra điều đó nằm ngoài khả năng lập luận hiện tại của trình tối ưu hóa. Một truy vấn cập nhật hoặc định nghĩa chế độ xem hơi khác thực sự có thể dẫn đến sự kết hợp của các hành động chèn, xóa và cập nhật chế độ xem.
  4. Toán tử Thu gọn được đánh dấu hoàn toàn vì vai trò của nó trong mẫu phân tách-sắp xếp-thu gọn được đề cập ở trên. Lưu ý rằng nó chỉ thu gọn xóa và chèn trên cùng một khóa; Việc xóa và chèn chưa từng có sau khi Thu gọn hoàn toàn có thể xảy ra (và khá bình thường).

Như trước đây, các thuộc tính toán tử chính cần xem xét để hiểu công việc duy trì chế độ xem được lập chỉ mục là Bộ lọc, Tổng hợp luồng, Kết hợp bên ngoài và Tính toán vô hướng.

Ví dụ 4 - Cập nhật nhiều hàng có kết hợp

Để hoàn thành tổng quan về kế hoạch thực hiện bảo trì chế độ xem được lập chỉ mục, chúng ta sẽ cần một chế độ xem mẫu mới kết hợp nhiều bảng với nhau và bao gồm một phép chiếu trong danh sách đã chọn:

CREATE TABLE dbo.E1 (g integer NULL, a integer NULL);
CREATE TABLE dbo.E2 (g integer NULL, a integer NULL);
CREATE TABLE dbo.E3 (g integer NULL, a integer NULL);
GO
INSERT dbo.E1 (g, a) VALUES (1, 1);
INSERT dbo.E2 (g, a) VALUES (1, 1);
INSERT dbo.E3 (g, a) VALUES (1, 1);
GO
CREATE VIEW dbo.V1
WITH SCHEMABINDING
AS
SELECT 
    g = E1.g, 
    sa1 = SUM(ISNULL(E1.a, 0)), 
    sa2 = SUM(ISNULL(E2.a, 0)), 
    sa3 = SUM(ISNULL(E3.a, 0)), 
    cbs = COUNT_BIG(*) 
FROM dbo.E1 AS E1
JOIN dbo.E2 AS E2
    ON E2.g = E1.g
JOIN dbo.E3 AS E3
    ON E3.g = E2.g
WHERE
    E1.g BETWEEN 1 AND 5
GROUP BY
    E1.g;
GO
CREATE UNIQUE CLUSTERED INDEX cuq
ON dbo.V1 (g);

Để đảm bảo tính đúng đắn, một trong những yêu cầu của chế độ xem được lập chỉ mục là một tổng hợp không thể hoạt động trên một biểu thức có thể đánh giá là null. Định nghĩa khung nhìn ở trên sử dụng ISNULL để đáp ứng yêu cầu đó. Một truy vấn cập nhật mẫu tạo ra một thành phần kế hoạch duy trì chỉ mục khá toàn diện được hiển thị bên dưới, cùng với kế hoạch thực thi mà nó tạo ra:

UPDATE dbo.E1 
SET g = g + 1, 
    a = a + 1;

Kế hoạch bây giờ trông khá lớn và phức tạp, nhưng hầu hết các yếu tố đều chính xác như chúng ta đã thấy. Sự khác biệt chính là:

  1. Nhánh trên cùng của kế hoạch bao gồm một số toán tử Vô hướng tính toán bổ sung. Chúng có thể được sắp xếp gọn gàng hơn, nhưng về cơ bản chúng hiện diện để nắm bắt các giá trị cập nhật trước của các cột không phân nhóm. Phạm vi tính toán ở bên trái của Cập nhật bảng ghi lại giá trị sau cập nhật của cột "a", với phép chiếu ISNULL được áp dụng.
  2. Các Scalars Tính toán mới trong khu vực này của kế hoạch sẽ tính toán giá trị được tạo ra bởi biểu thức ISNULL trên mỗi bảng nguồn. Nói chung, các phép chiếu trên các bảng được kết hợp trong dạng xem sẽ được biểu diễn bằng Tính vô hướng ở đây. Các loại trong khu vực này của kế hoạch hiện diện hoàn toàn bởi vì trình tối ưu hóa đã chọn chiến lược kết hợp hợp nhất vì lý do chi phí (hãy nhớ rằng hợp nhất yêu cầu đầu vào được sắp xếp theo khóa nối).
  3. Hai toán tử nối là mới và chỉ cần triển khai các phép nối trong định nghĩa dạng xem. Các liên kết này luôn xuất hiện trước Tổng hợp luồng tính hiệu ứng gia tăng của các thay đổi đối với chế độ xem. Lưu ý rằng thay đổi đối với bảng cơ sở có thể dẫn đến một hàng đã từng đáp ứng tiêu chí kết hợp không còn tham gia và ngược lại. Tất cả những phức tạp tiềm ẩn này đều được Tổng hợp luồng xử lý chính xác (với các hạn chế về chế độ xem được lập chỉ mục), tạo ra bản tóm tắt về các thay đổi cho mỗi khóa chế độ xem sau khi các phép liên kết đã được thực hiện.

Lời kết

Kế hoạch cuối cùng đó đại diện cho khá nhiều mẫu đầy đủ để duy trì một chế độ xem được lập chỉ mục, mặc dù việc bổ sung các chỉ mục không phân tán vào chế độ xem cũng sẽ thêm các toán tử bổ sung vào đầu ra của toán tử cập nhật chế độ xem. Ngoài một Tách bổ sung (và kết hợp Sắp xếp và Thu gọn nếu chỉ mục không phân tán của chế độ xem là duy nhất), không có gì đặc biệt về khả năng này. Việc thêm một mệnh đề đầu ra vào truy vấn bảng cơ sở cũng có thể tạo ra một số toán tử bổ sung thú vị, nhưng một lần nữa, các toán tử này không đặc biệt đối với bảo trì chế độ xem được lập chỉ mục.

Để tóm tắt toàn bộ chiến lược tổng thể:

  • Các thay đổi của bảng cơ sở được áp dụng như bình thường; các giá trị trước khi cập nhật có thể được ghi lại.
  • Một toán tử phân tách có thể được sử dụng để chuyển đổi các cập nhật thành các cặp xóa / chèn.
  • Một cuộn mong muốn lưu thông tin thay đổi của bảng cơ sở vào bộ nhớ tạm thời.
  • Tất cả các bảng trong dạng xem đều được truy cập, ngoại trừ bảng cơ sở được cập nhật (được đọc từ ống chỉ).
  • Các phép chiếu trong chế độ xem được trình bày bằng Tính vô hướng.
  • Các bộ lọc trong chế độ xem được áp dụng. Bộ lọc có thể được đẩy vào quét hoặc tìm kiếm phần dư.
  • Các phép nối được chỉ định trong dạng xem được thực hiện.
  • Một tổng hợp tính toán các thay đổi thực sự gia tăng được nhóm theo khóa chế độ xem được phân nhóm.
  • Tập hợp thay đổi gia tăng được kết hợp bên ngoài với chế độ xem.
  • Tính toán Scalar tính toán mã hành động (chèn / cập nhật / xóa đối với chế độ xem) cho mỗi thay đổi và tính toán các giá trị thực tế sẽ được chèn hoặc cập nhật. Logic tính toán dựa trên đầu ra của tổng hợp và kết quả của phép nối bên ngoài với khung nhìn.
  • Các thay đổi được sắp xếp theo thứ tự khóa xem và mã hành động và được thu gọn vào các bản cập nhật nếu thích hợp.
  • Cuối cùng, các thay đổi gia tăng được áp dụng cho chính chế độ xem.

Như chúng ta đã thấy, bộ công cụ bình thường có sẵn cho trình tối ưu hóa truy vấn vẫn được áp dụng cho các phần được tạo tự động của kế hoạch, có nghĩa là một hoặc nhiều bước ở trên có thể được đơn giản hóa, chuyển đổi hoặc loại bỏ hoàn toàn. Tuy nhiên, hình dạng cơ bản và hoạt động của kế hoạch vẫn còn nguyên vẹn.

Nếu bạn đã làm theo cùng với các ví dụ mã, bạn có thể sử dụng tập lệnh sau để dọn dẹp:

DROP VIEW dbo.V1;
DROP TABLE dbo.E3, dbo.E2, dbo.E1;
DROP VIEW dbo.IV;
DROP TABLE dbo.T1;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bắt đầu với Cloud Firestore cho iOS

  2. Phục vụ Đồ ăn Ngon (và Dữ liệu) - Mô hình Dữ liệu cho Nhà hàng

  3. 9 hệ thống quản lý cơ sở dữ liệu hàng đầu cho các mẫu của Joomla

  4. Trình điều khiển ODBC Google BigQuery

  5. Tạo máy chủ được liên kết ODBC mà không cần định cấu hình nguồn dữ liệu