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

Nội bộ của bảy loại máy chủ SQL - Phần 1

Liên quan đến các kế hoạch thực thi đồ họa, chỉ có một biểu tượng cho một loại vật lý trong SQL Server:

Biểu tượng tương tự này được sử dụng cho ba toán tử sắp xếp logic:Sắp xếp, Sắp xếp N hàng đầu và Sắp xếp riêng:

Đi sâu hơn vào một cấp độ, có bốn cách triển khai khác nhau của Sắp xếp trong công cụ thực thi (không tính sắp xếp hàng loạt cho các phép nối vòng lặp được tối ưu hóa, đây không phải là một kiểu sắp xếp đầy đủ và không hiển thị trong các kế hoạch). Nếu bạn đang sử dụng SQL Server 2014, số lượng triển khai Sắp xếp công cụ thực thi sẽ tăng lên bảy:

  1. CQScanSortNew
  2. CQScanTopSortNew
  3. CQScanIndexSortNew
  4. CQScanPartitionSortNew (chỉ dành cho SQL Server 2014)
  5. CQScanInMemSortNew
  6. Trong bộ nhớ OLTP (Hekaton) thủ tục được biên dịch nguyên bản Top N Sort (chỉ dành cho SQL Server 2014)
  7. Trong bộ nhớ OLTP (Hekaton) thủ tục được biên dịch nguyên bản Sắp xếp chung (chỉ dành cho SQL Server 2014)

Bài viết này xem xét các triển khai sắp xếp này và khi nào chúng được sử dụng trong SQL Server. Phần một bao gồm bốn mục đầu tiên trong danh sách.

1. CQScanSortNew

Đây là lớp sắp xếp chung nhất, được sử dụng khi không có tùy chọn khả dụng nào khác có thể áp dụng được. Sắp xếp chung sử dụng quyền cấp bộ nhớ không gian làm việc được dành riêng ngay trước khi bắt đầu thực thi truy vấn. Khoản trợ cấp này tỷ lệ thuận với ước tính về số lượng và kỳ vọng về kích thước hàng trung bình và không thể tăng lên sau khi bắt đầu thực thi truy vấn.

Việc triển khai hiện tại dường như sử dụng nhiều loại hợp nhất nội bộ (có lẽ là sắp xếp hợp nhất nhị phân), chuyển sang sắp xếp hợp nhất bên ngoài (với nhiều lần chuyển nếu cần) nếu bộ nhớ dành riêng không đủ. Sắp xếp hợp nhất bên ngoài sử dụng tempdb vật lý không gian cho các lần chạy sắp xếp không phù hợp với bộ nhớ (thường được gọi là tràn sắp xếp). Sắp xếp chung cũng có thể được định cấu hình để áp dụng tính riêng biệt trong quá trình sắp xếp.

Dấu vết ngăn xếp từng phần sau đây cho thấy một ví dụ về CQScanSortNew chuỗi sắp xếp lớp sử dụng sắp xếp hợp nhất nội bộ:

Trong kế hoạch thực thi, Sắp xếp cung cấp thông tin về phần cấp bộ nhớ không gian làm việc truy vấn tổng thể có sẵn cho Sắp xếp khi đọc bản ghi (giai đoạn đầu vào) và phần khả dụng khi đầu ra được sắp xếp đang được sử dụng bởi các toán tử kế hoạch mẹ (giai đoạn đầu ra ).

Phần cấp bộ nhớ là một số từ 0 đến 1 (trong đó 1 =100% bộ nhớ được cấp) và được hiển thị trong SSMS bằng cách đánh dấu Sắp xếp và tìm trong cửa sổ Thuộc tính. Ví dụ dưới đây được lấy từ một truy vấn chỉ có một toán tử Sắp xếp duy nhất, vì vậy, nó có quyền truy vấn đầy đủ bộ nhớ không gian làm việc có sẵn trong cả hai giai đoạn đầu vào và đầu ra:

Các phân đoạn bộ nhớ phản ánh thực tế là trong giai đoạn đầu vào của nó, Sort phải chia sẻ quyền truy vấn tổng thể bộ nhớ với các toán tử ngốn bộ nhớ thực thi đồng thời bên dưới nó trong kế hoạch thực thi. Tương tự, trong giai đoạn đầu ra, Sort phải chia sẻ bộ nhớ được cấp với các toán tử tiêu tốn bộ nhớ thực thi đồng thời ở trên nó trong kế hoạch thực thi.

Bộ xử lý truy vấn đủ thông minh để biết rằng một số toán tử đang chặn (dừng và đi), đánh dấu ranh giới một cách hiệu quả nơi mà bộ nhớ cấp có thể được tái chế và sử dụng lại. Trong các kế hoạch song song, phần cấp bộ nhớ có sẵn cho một Sắp xếp chung được chia đều giữa các luồng và không thể được cân bằng lại trong thời gian chạy trong trường hợp lệch (nguyên nhân phổ biến gây tràn trong các kế hoạch sắp xếp song song).

SQL Server 2012 trở về sau bao gồm thông tin bổ sung về mức cấp bộ nhớ không gian làm việc tối thiểu cần thiết để khởi tạo toán tử gói tiêu tốn bộ nhớ và mong muốn cấp bộ nhớ (lượng bộ nhớ "lý tưởng" ước tính cần thiết để hoàn thành toàn bộ hoạt động trong bộ nhớ). Trong kế hoạch thực thi sau thực thi ("thực tế"), cũng có thông tin mới về bất kỳ sự chậm trễ nào trong việc cấp bộ nhớ, dung lượng bộ nhớ tối đa thực sự được sử dụng và cách phân phối dự phòng bộ nhớ trên các nút NUMA.

Tất cả các ví dụ AdventureWorks sau đây đều sử dụng CQScanSortNew sắp xếp chung:

 - Một Sắp xếp Thông thường (CQScanSortNew) CHỌN P.FirstName, P.MiddleName, P.LastNameFROM Person.Person AS PORDER BY P.FirstName, P.MiddleName, P.LastName; - Phân loại riêng biệt (cũng CQScanSortNew) CHỌN DISTINCT P.FirstName, P.MiddleName, P.LastNameFROM Person.Person AS PORDER BY P.FirstName, P.MiddleName, P.LastName; - Cùng một truy vấn được thể hiện bằng cách sử dụng GROUP BY - Cùng một kế hoạch thực thi Phân loại khác nhau (CQScanSortNew )SELECT P.FirstName, P.MiddleName, P.LastNameFROM Person.Person AS PGROUP BY P.FirstName, P.MiddleName, P.LastNameORDER BY P.FirstName , P.MiddleName, P.LastName; 

Truy vấn đầu tiên (một loại không phân biệt) tạo ra kế hoạch thực thi sau:

Truy vấn thứ hai và thứ ba (tương đương) tạo ra kế hoạch này:

CQScanSortNew có thể được sử dụng cho cả Sắp xếp chung hợp lý và Sắp xếp riêng hợp lý.

2. CQScanTopSortNew

CQScanTopSortNew là một lớp con của CQScanSortNew được sử dụng để thực hiện Sắp xếp N Top (như tên cho thấy). CQScanTopSortNew ủy quyền phần lớn công việc cốt lõi cho CQScanSortNew , nhưng sửa đổi hành vi chi tiết theo những cách khác nhau, tùy thuộc vào giá trị của N.

Đối với N> 100, CQScanTopSortNew về cơ bản chỉ là một CQScanSortNew thông thường sắp xếp tự động ngừng tạo các hàng đã sắp xếp sau N hàng. Đối với N <=100, CQScanTopSortNew chỉ giữ lại các kết quả Top N hiện tại trong quá trình sắp xếp và theo dõi giá trị khóa thấp nhất hiện đủ điều kiện.

Ví dụ:trong một Sắp xếp N hàng đầu được tối ưu hóa (trong đó N <=100) ngăn xếp cuộc gọi có tính năng RowsetTopN trong khi với cách sắp xếp chung trong phần 1, chúng ta đã thấy RowsetSorted :

Đối với Sắp xếp N hàng đầu trong đó N> 100, ngăn xếp lệnh gọi ở cùng giai đoạn thực thi giống như sắp xếp chung đã thấy trước đó:

Lưu ý rằng CQScanTopSortNew tên lớp không xuất hiện trong một trong hai dấu vết ngăn xếp đó. Điều này đơn giản là do cách phân loại phụ hoạt động. Tại các điểm khác trong quá trình thực thi các truy vấn này, CQScanTopSortNew các phương thức (ví dụ:Open, GetRow và CreateTopNTable) xuất hiện rõ ràng trên ngăn xếp cuộc gọi. Ví dụ:phần sau được thực hiện sau đó trong quá trình thực thi truy vấn và hiển thị CQScanTopSortNew tên lớp:

Sắp xếp N hàng đầu và Trình tối ưu hóa Truy vấn

Trình tối ưu hóa truy vấn không biết gì về Top N Sort, chỉ là một toán tử công cụ thực thi. Khi trình tối ưu hóa tạo ra một cây đầu ra với toán tử Top vật lý ngay trên một Sắp xếp vật lý (không khác biệt), việc viết lại sau tối ưu hóa có thể thu gọn hai hoạt động vật lý thành một toán tử Sắp xếp N Top. Ngay cả trong trường hợp N> 100, điều này đại diện cho việc lưu chuyển các hàng lặp đi lặp lại giữa đầu ra Sắp xếp và đầu vào Hàng đầu.

Truy vấn sau sử dụng một số cờ theo dõi không có tài liệu để hiển thị đầu ra của trình tối ưu hóa và hành động viết lại sau tối ưu hóa:

 CHỌN HÀNG ĐẦU (10) P.FirstName, P.MiddleName, P.LastNameFROM Person.Person AS PORDER BY P.FirstName, P.MiddleName, P.LastNameOPTION (QUERYTRACEON 3604, QUERYTRACEON 8607, QUERYTRACEON 7352); 

Cây đầu ra của trình tối ưu hóa hiển thị các toán tử Sắp xếp và Hàng đầu vật lý riêng biệt:

Sau khi viết lại sau khi tối ưu hóa, Top và Sắp xếp đã được thu gọn thành một Top N Sort:

Kế hoạch thực thi đồ họa cho truy vấn T-SQL ở trên hiển thị toán tử Sắp xếp N hàng đầu:

Viết lại Xếp thứ N hàng đầu

Việc viết lại sau khi tối ưu hóa Sắp xếp Top N chỉ có thể thu gọn một Sắp xếp trên cùng và không phân biệt liền kề thành Sắp xếp N. Việc thêm DISTINCT (hoặc mệnh đề GROUP BY tương đương) vào truy vấn ở trên sẽ ngăn việc viết lại Xếp thứ N hàng đầu:

 CHỌN HÀNG ĐẦU SỐ (10) P.FirstName, P.MiddleName, P.LastNameFROM Người. NGƯỜI LÀM BIÊN BẢN CỦA P.FirstName, P.MiddleName, P.LastName; 

Kế hoạch thực thi cuối cùng cho truy vấn này có các toán tử Trên cùng và Sắp xếp (Sắp xếp riêng biệt) riêng biệt:

Sắp xếp ở đó là CQScanSortNew chung lớp chạy ở chế độ riêng biệt như đã thấy trong phần 1 trước đó.

Cách thứ hai để ngăn việc ghi lại thành Xếp thứ N trên cùng là giới thiệu một hoặc nhiều toán tử bổ sung giữa Top và Sắp xếp. Ví dụ:

 CHỌN ĐẦU (10) P.FirstName, P.MiddleName, P.LastName, rn =RANK () OVER (ĐẶT HÀNG THEO P.FirstName) TỪ NGƯỜI. NGƯỜI LÀM BIÊN GIỚI CỦA P.FirstName, P.MiddleName, P. LastName; 

Đầu ra của trình tối ưu hóa truy vấn bây giờ xảy ra có hoạt động giữa Trên cùng và Sắp xếp, vì vậy Sắp xếp N Trên cùng không được tạo trong giai đoạn viết lại sau tối ưu hóa:

Kế hoạch thực hiện là:

Trình tự tính toán (được triển khai dưới dạng hai Phân đoạn và Dự án trình tự) giữa Trên cùng và Sắp xếp ngăn chặn sự thu gọn của Trên cùng và Sắp xếp thành một toán tử Sắp xếp N Top. Tất nhiên, vẫn sẽ thu được các kết quả chính xác từ kế hoạch này, nhưng việc thực thi có thể kém hiệu quả hơn một chút so với khi sử dụng toán tử Sắp xếp Top N kết hợp.

3. CQScanIndexSortNew

CQScanIndexSortNew chỉ được sử dụng để sắp xếp trong các kế hoạch xây dựng chỉ mục DDL. Nó sử dụng lại một số phương tiện sắp xếp chung mà chúng ta đã thấy, nhưng bổ sung các tối ưu hóa cụ thể cho việc chèn chỉ mục. Đây cũng là lớp sắp xếp duy nhất có thể tự động yêu cầu thêm bộ nhớ sau khi quá trình thực thi đã bắt đầu.

Ước tính số lượng thường chính xác đối với kế hoạch xây dựng chỉ mục vì tổng số hàng trong bảng thường là một đại lượng đã biết. Điều đó không có nghĩa là việc cấp bộ nhớ cho các loại kế hoạch xây dựng chỉ mục sẽ luôn chính xác; nó chỉ làm cho nó dễ dàng hơn một chút để demo. Vì vậy, ví dụ sau sử dụng một phần mở rộng không có tài liệu, nhưng khá nổi tiếng, cho lệnh UPDATE STATISTICS để đánh lừa trình tối ưu hóa nghĩ rằng bảng mà chúng ta đang tạo chỉ mục chỉ có một hàng:

 - Test tableCREATE TABLE dbo.People (FirstName dbo.Name NOT NULL, LastName dbo.Name NOT NULL); ĐI - Sao chép hàng từ Person.PersonINSERT dbo.People WITH (TABLOCKX) (FirstName, LastName) CHỌN P .FirstName, P.LastNameFROM Person.Person AS P; GO-- Giả sử bảng chỉ có 1 hàng và 1 trang (LastName, FirstName); ĐI - Dọn dẹp BẢNG DUYỆT dbo.People; 

Kế hoạch thực thi sau thực thi ("thực tế") cho việc xây dựng chỉ mục không hiển thị cảnh báo cho sắp xếp tràn (khi chạy trên SQL Server 2012 trở lên) mặc dù ước tính 1 hàng và 19,972 hàng được sắp xếp thực sự:

Xác nhận rằng việc cấp bộ nhớ ban đầu đã được mở rộng động đến từ việc xem xét các thuộc tính của trình lặp gốc. Truy vấn ban đầu được cấp 1024KB bộ nhớ, nhưng cuối cùng đã tiêu thụ 1576KB:

Sự gia tăng động trong bộ nhớ được cấp cũng có thể được theo dõi bằng cách sử dụng Sự kiện mở rộng kênh gỡ lỗi sort_memory_grant_adjustment. Sự kiện này được tạo ra mỗi khi cấp phát bộ nhớ được tăng động. Nếu sự kiện này đang được theo dõi, chúng tôi có thể ghi lại dấu vết ngăn xếp khi nó được xuất bản, thông qua Sự kiện mở rộng (với một số cấu hình khó xử và cờ theo dõi) hoặc từ trình gỡ lỗi đính kèm, như bên dưới:

Việc mở rộng cấp bộ nhớ động cũng có thể trợ giúp với các kế hoạch xây dựng chỉ mục song song trong đó sự phân bố của các hàng trên các luồng không đồng đều. Tuy nhiên, dung lượng bộ nhớ có thể được sử dụng theo cách này không phải là không giới hạn. SQL Server kiểm tra mỗi khi cần mở rộng để xem liệu yêu cầu có hợp lý với các tài nguyên có sẵn tại thời điểm đó hay không.

Có thể thu được một số thông tin chi tiết về quy trình này bằng cách bật cờ theo dõi không có tài liệu 1504, cùng với 3604 (đối với thông báo xuất ra bảng điều khiển) hoặc 3605 (xuất ra nhật ký lỗi SQL Server). Nếu kế hoạch xây dựng chỉ mục là song song, thì chỉ 3605 là có hiệu quả vì những người làm việc song song không thể gửi thông báo theo dõi xuyên luồng tới bảng điều khiển.

Phần sau của đầu ra theo dõi đã được ghi lại trong khi xây dựng một chỉ mục lớn vừa phải trên phiên bản SQL Server 2014 với bộ nhớ hạn chế:

Việc mở rộng bộ nhớ cho quá trình sắp xếp được tiếp tục cho đến khi yêu cầu được coi là không khả thi, tại thời điểm đó, nó được xác định rằng đã có đủ bộ nhớ để hoàn thành lần tràn sắp xếp một lần.

4. CQScanPartitionSortNew

Tên lớp này có thể gợi ý rằng kiểu sắp xếp này được sử dụng cho dữ liệu bảng được phân vùng hoặc khi xây dựng chỉ mục trên các bảng được phân vùng, nhưng thực tế không phải vậy. Sắp xếp dữ liệu được phân vùng sử dụng CQScanSortNew hoặc CQScanTopSortNew như bình thường; sắp xếp các hàng để chèn vào chỉ mục được phân vùng thường sử dụng CQScanIndexSortNew như đã thấy trong phần 3.

CQScanPartitionSortNew lớp sắp xếp chỉ hiện diện trong SQL Server 2014. Nó chỉ được sử dụng khi sắp xếp các hàng theo id phân vùng, trước khi chèn vào chỉ mục columnstore nhóm phân vùng . Lưu ý rằng nó chỉ được sử dụng cho phân vùng cụm cột; các kế hoạch chèn cột lưu trữ dạng cột thông thường (không phân vùng) không được hưởng lợi từ việc sắp xếp.

Chèn vào một chỉ mục columnstore được phân nhóm được phân vùng sẽ không phải lúc nào cũng có sắp xếp. Đây là một quyết định dựa trên chi phí phụ thuộc vào số lượng hàng ước tính sẽ được chèn vào. Nếu trình tối ưu hóa ước tính rằng đáng để sắp xếp các chèn theo phân vùng để tối ưu hóa I / O, thì toán tử chèn cột sẽ có DMLRequestSort thuộc tính được đặt thành true và một CQScanPartitionSortNew sắp xếp có thể xuất hiện trong kế hoạch thực thi.

Bản trình diễn trong phần này sử dụng một bảng vĩnh viễn các số tuần tự. Nếu bạn không có một trong những tập lệnh đó, bạn có thể sử dụng tập lệnh sau để tạo một tập lệnh:

 - Trình tạo hàng của Itzik Ben-GanWITH L0 AS (CHỌN 1 NHƯ c ĐOÀN KẾT TẤT CẢ CHỌN 1), L1 AS (CHỌN 1 NHƯ c TỪ L0 NHƯ CỘNG ĐỒNG L0 NHƯ B), L2 AS (CHỌN 1 NHƯ c TỪ L1 AS a CROSS JOIN L1 AS B), L3 AS (CHỌN 1 AS c TỪ L2 AS A CROSS JOIN L2 AS B), L4 AS (CHỌN 1 AS c TỪ L3 AS A CROSS JOIN L3 AS B), L5 AS (CHỌN 1 AS c FROM L4 AS A CROSS JOIN L4 AS B), Nums AS (SELECT ROW_NUMBER () OVER (ORDER BY (SELECT NULL)) AS n FROM L5) SELECT - Cột đích kiểu số nguyên NOT NULL ISNULL (CONVERT (số nguyên, N.n), 0) AS nINTO dbo.NumbersFROM Nums AS NWHERE N.n > =1AND N.n <=1000000OPTION (MAXDOP 1); BẢNG MỤC TIÊU dbo.NumbersADD CONSTRAINT PK_Numbers_nPRIMARY KEY CLUSTERORED (n) WITH (SORT_IN_TEMPDCTB =ON, MAXDOP =100); 

Bản trình diễn liên quan đến việc tạo một bảng được lập chỉ mục theo cột được phân vùng theo cụm được phân vùng và chèn đủ hàng (từ bảng Numbers ở trên) để thuyết phục trình tối ưu hóa sử dụng sắp xếp phân vùng chèn sẵn:

 TẠO CHỨC NĂNG PHẦN PF (số nguyên) NHƯ QUYỀN TẢI TRỌNG CHO CÁC GIÁ TRỊ (1000, 2000, 3000); GOCREATE PARTITION SCHEME PSAS PARTITION PFALL TO ([PRIMARY]); ĐI - BẢNG heapCREATE được phân vùng dbo.Partitioned (col1 integer NOT NULL, số nguyên col2 NOT NULL DEFAULT ABS (CHECKSUM (NEWID ())), số nguyên col3 NOT NULL DEFAULT ABS (CHECKSUM (NEWID ()))) TRÊN PS (col1); ĐI - Chuyển đổi heap thành columnstore được phân vùng theo cụm phân vùngCREATE CLUSTERED COLUMNSTORE INDEX ccsiON dbo.PartitionedON PS (col1); ĐI-- Thêm hàng vào bảng phân vùng cột được phân vùng 

Kế hoạch thực thi cho phần chèn cho thấy cách sắp xếp được sử dụng để đảm bảo các hàng đến trình vòng lặp chèn cột được phân cụm theo thứ tự id phân vùng:

Ngăn xếp cuộc gọi được ghi lại trong khi CQScanPartitionSortNew sắp xếp đang được tiến hành được hiển thị bên dưới:

Có điều gì đó thú vị khác về lớp sắp xếp này. Các sắp xếp thường sử dụng toàn bộ dữ liệu đầu vào trong lệnh gọi phương thức Mở của chúng. Sau khi sắp xếp, họ trả lại quyền kiểm soát cho nhà điều hành mẹ của họ. Sau đó, sắp xếp bắt đầu tạo ra các hàng đầu ra được sắp xếp tại một thời điểm theo cách thông thường thông qua các cuộc gọi GetRow. CQScanPartitionSortNew thì khác, như bạn có thể thấy trong ngăn xếp cuộc gọi ở trên:Nó không sử dụng dữ liệu đầu vào trong khi mở phương thức - nó đợi cho đến khi GetRow được gọi bởi cha mẹ của nó lần đầu tiên.

Không phải mọi sắp xếp trên id phân vùng xuất hiện trong kế hoạch thực thi chèn các hàng vào chỉ mục cột lưu trữ được phân nhóm được phân vùng sẽ là CQScanPartitionSortNew loại. Nếu sắp xếp xuất hiện ngay lập tức ở bên phải của toán tử chèn chỉ mục cột, thì rất có thể đó là một CQScanPartitionSortNew sắp xếp.

Cuối cùng, CQScanPartitionSortNew là một trong hai lớp sắp xếp duy nhất đặt thuộc tính Sắp xếp mềm được hiển thị khi các thuộc tính kế hoạch thực thi của toán tử Sắp xếp được tạo với cờ theo dõi không có tài liệu 8666 được bật:

Ý nghĩa của "phân loại mềm" trong ngữ cảnh này là không rõ ràng. Nó được theo dõi như một thuộc tính trong khuôn khổ của trình tối ưu hóa truy vấn và có vẻ như có liên quan đến việc chèn dữ liệu được phân vùng được tối ưu hóa, nhưng việc xác định chính xác ý nghĩa của nó thì cần phải nghiên cứu thêm. Trong thời gian chờ đợi, thuộc tính này có thể được sử dụng để suy ra rằng Sắp xếp được triển khai với CQScanPartitionSortNew mà không cần đính kèm trình gỡ lỗi. Ý nghĩa của cờ thuộc tính InMemory được hiển thị ở trên sẽ được đề cập trong phần 2. Nó không không cho biết việc sắp xếp thông thường có được thực hiện trong bộ nhớ hay không.

Tóm tắt Phần Một

  • CQScanSortNew là lớp sắp xếp chung được sử dụng khi không có tùy chọn nào khác được áp dụng. Có vẻ như nó sử dụng nhiều loại sắp xếp hợp nhất nội bộ trong bộ nhớ, chuyển sang sắp xếp hợp nhất bên ngoài bằng cách sử dụng tempdb nếu được cấp bộ nhớ không gian làm việc hóa ra là không đủ. Lớp này có thể được sử dụng cho Sắp xếp chung và Sắp xếp riêng.
  • CQScanTopSortNew triển khai Sắp xếp N hàng đầu. Trong đó N <=100, sắp xếp hợp nhất trong bộ nhớ trong được thực hiện và không bao giờ tràn sang tempdb . Chỉ n mục hàng đầu hiện tại được giữ lại trong bộ nhớ trong quá trình sắp xếp. Đối với N> 100 CQScanTopSortNew tương đương với một CQScanSortNew sắp xếp tự động dừng sau khi N hàng được xuất. N> 100 sắp xếp có thể tràn sang tempdb nếu cần.
  • Xếp hạng N Hàng đầu được thấy trong các kế hoạch thực thi là phần viết lại sau khi tối ưu hóa truy vấn. Nếu trình tối ưu hóa truy vấn tạo ra cây đầu ra có Sắp xếp trên cùng và không phân biệt liền kề, thì việc viết lại này có thể thu gọn hai toán tử vật lý thành một toán tử Sắp xếp N trên cùng.
  • CQScanIndexSortNew chỉ được sử dụng trong các kế hoạch DDL xây dựng chỉ mục. Đây là lớp sắp xếp tiêu chuẩn duy nhất có thể tự động thu được nhiều bộ nhớ hơn trong quá trình thực thi. Các loại xây dựng chỉ mục vẫn có thể tràn ra đĩa trong một số trường hợp, bao gồm cả khi SQL Server quyết định việc tăng bộ nhớ được yêu cầu không tương thích với khối lượng công việc hiện tại.
  • CQScanPartitionSortNew chỉ hiện diện trong SQL Server 2014 và chỉ được sử dụng để tối ưu hóa các phần chèn vào chỉ mục cột lưu trữ được phân vùng được phân vùng. Nó cung cấp một "phân loại mềm".

Phần thứ hai của bài viết này sẽ xem xét CQScanInMemSortNew và hai loại thủ tục lưu trữ trong bộ nhớ OLTP được biên dịch nguyên bản.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều gì đại diện cho một đôi trong máy chủ sql?

  2. Truyền mảng tới một thủ tục được lưu trữ trên máy chủ SQL

  3. Câu lệnh ALTER TABLE xung đột với ràng buộc CHECK trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 89

  4. Hoạt động CRUD với ASP.NET Core MVC, Entity Framework Core và SQL Server

  5. Chuyển đổi giá trị văn bản trong SQL Server từ UTF8 sang ISO 8859-1