Chính xác những gì có thể chạy trong chế độ hàng loạt như SQL Server 2014?
SQL Server 2014 thêm phần sau vào danh sách ban đầu của các toán tử chế độ hàng loạt:
- Tham gia Hash ngoài (bao gồm tham gia đầy đủ)
- Hash Semi Tham gia
- Hash Anti Semi Tham gia
- Liên minh tất cả (chỉ liên kết)
- Tổng hợp hàm băm vô hướng (không có nhóm theo)
- Đã xóa Batch Hash Table
Dường như dữ liệu có thể chuyển sang chế độ hàng loạt ngay cả khi nó không bắt nguồn từ chỉ mục của cột.
SQL Server 2012 rất hạn chế trong việc sử dụng các toán tử lô. Các kế hoạch chế độ hàng loạt có hình dạng cố định, dựa vào phương pháp phỏng đoán và không thể khởi động lại chế độ hàng loạt sau khi quá trình chuyển sang chế độ hàng được thực hiện.
SQL Server 2014 thêm chế độ thực thi (lô hoặc hàng) vào khung thuộc tính chung của trình tối ưu hóa truy vấn, có nghĩa là nó có thể xem xét chuyển sang và ra khỏi chế độ hàng loạt tại bất kỳ điểm nào trong kế hoạch. Chuyển đổi được thực hiện bởi các bộ điều hợp chế độ thực thi vô hình trong kế hoạch. Những bộ điều hợp này có chi phí liên quan đến chúng để hạn chế số lượng chuyển đổi được giới thiệu trong quá trình tối ưu hóa. Mô hình linh hoạt mới này được gọi là Thực thi chế độ hỗn hợp.
Các bộ điều hợp chế độ thực thi có thể được nhìn thấy trong đầu ra của trình tối ưu hóa (mặc dù đáng buồn là không có trong các kế hoạch thực hiện có thể nhìn thấy của người dùng) với TF 8607 không có giấy tờ. Ví dụ: những điều sau đây được ghi lại cho một hàng đếm truy vấn trong một hàng lưu trữ:
Việc sử dụng chỉ mục cột có phải là một yêu cầu chính thức cần thiết để khiến SQL Server xem xét chế độ hàng loạt không?
Đó là ngày hôm nay, vâng. Một lý do có thể cho hạn chế này là nó tự nhiên hạn chế xử lý chế độ hàng loạt thành Phiên bản doanh nghiệp.
Chúng ta có thể thêm một bảng giả hàng không với chỉ mục cột để tạo chế độ hàng loạt không?
Vâng, điều này hoạt động. Tôi cũng đã thấy mọi người tham gia chéo với một chỉ mục cửa hàng cột đơn hàng vì lý do này. Gợi ý mà bạn đưa ra trong các bình luận để lại tham gia vào một bảng cột giả trên false là rất tuyệt vời.
-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*)
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;
Kế hoạch với hình nộm bên trái tham gia:
Tài liệu mỏng
Thật.
Các nguồn thông tin chính thức tốt nhất là Chỉ mục cột được mô tả và Điều chỉnh hiệu suất của cột máy chủ SQL .
SQL Server MVP Niko Neugebauer có một loạt tuyệt vời trên cột lưu trữ nói chung ở đây .
Có một số chi tiết kỹ thuật tốt về các thay đổi năm 2014 trong bài viết Nghiên cứu của Microsoft, Cải tiến đối với Cửa hàng Cột SQL Server (pdf) mặc dù đây không phải là tài liệu chính thức của sản phẩm.