Giải phẫu của một chỉ số cột là gì?


20

Một trong những tính năng mới trong SQL Server 2012 có tên mã Denalichỉ mục Cột.

Tôi biết một chút về các chỉ mục lưu trữ hàng cũ thông thường, như cấu trúc cây b, sự khác biệt về lưu trữ giữa cấp độ lá và trang b, ảnh hưởng của các trường được bao gồm, tối ưu hóa để sử dụng chúng, thứ tự các khóa, v.v.

Tôi đang gặp khó khăn để có được bất kỳ thông tin tốt về nội bộ của một chỉ mục cột.

  • Nó có cấu trúc như thế nào?
  • Có cây b không? Một số cấu trúc khác tại chỗ?
  • Dữ liệu được tổ chức như thế nào?
  • Những loại toán tử cụ thể phù hợp nhất để sử dụng nó?
  • Bất kỳ chống mẫu nào khác cần tránh khi sử dụng chúng?

Rất nhiều điều tôi có thể tìm hiểu về chúng về cơ bản trái ngược hoàn toàn với chỉ số "bình thường", tức là không sắp xếp thứ tự các khóa, không bao gồm các trường, CHỈ không bao gồm.

Bất kỳ hiểu biết đều được đánh giá cao.


Có khá nhiều fanout về việc triển khai kỹ thuật cơ sở dữ liệu lưu trữ cột trên trang wikipedia. Tôi tưởng tượng chỉ mục này chỉ là một cấu trúc lưu trữ dữ liệu cột cho một cột duy nhất cùng với các khóa của nó. Có lẽ nó sử dụng một chỉ số bitmap, có thể là một BTree.
Mối quan tâmOfTunbridgeWells

Nó thực sự cho nhiều cột. Ngoài ra, tôi giả sử như với các triển khai SS khác, nó sẽ khác một chút so với các sản phẩm khác
JNK

Đối với MySQL nhưng cũng áp dụng tương tự: developer.bazaarvoice.com/why-columns-are-cool Ngoài ra Sybase IQ là ông bố vĩ đại
gbn

3
@ConcernedOfTunbridgeWells - Các chỉ mục của cột có sử dụng chỉ mục bitmap không? Không. Các chỉ mục của Cột sử dụng biểu diễn dữ liệu độc quyền dựa trên Vertipaq. Nó không giống như một chỉ mục bitmap và không sử dụng một chỉ mục. Nhưng nó có một số lợi ích tương tự với các chỉ mục bitmap, chẳng hạn như giảm thời gian cần thiết để lọc trên một cột với một số lượng nhỏ các giá trị riêng biệt.
Martin Smith

1
Remus Rusanu, một thành viên của nhóm phát triển tính năng này, vừa đăng một đoạn về điều này: Bên trong SQL Server 2012 COLUMNSTORE Indexes
Nick

Câu trả lời:


22

Cấu trúc cột

Dữ liệu của cột lưu trữ được lưu trữ vật lý trong một hoặc nhiều phân đoạn (đơn vị phân bổ LOB thông thường) trên mỗi cột và cũng có thể được phân vùng theo cách thông thường. Mỗi phân đoạn chứa khoảng một triệu hàng giá trị được nén cao hoặc tham chiếu giá trị (có sẵn một số kỹ thuật nén). Một tham chiếu giá trị liên kết đến một mục trong một trong hai từ điển băm .

Từ điển được ghim trong bộ nhớ trong khi thực hiện truy vấn, với ID giá trị dữ liệu từ phân đoạn được tìm trong từ điển bất cứ khi nào thực thi yêu cầu giá trị dữ liệu thực tế (việc tra cứu này được hoãn lại càng lâu càng tốt vì lý do hiệu suất).

Các phân đoạn cũng có bản ghi tiêu đề chứa siêu dữ liệu, chẳng hạn như các giá trị tối thiểu và tối đa được lưu trữ trong phân khúc. Thông tin từ tiêu đề thường có thể được sử dụng để loại bỏ các phân vùng hoàn chỉnh khỏi quá trình xử lý tại thời điểm thực hiện. Thông tin bản ghi tiêu đề được lưu trữ trong cấu trúc gốc dữ liệu LOB thông thường, do đó loại bỏ phân đoạn có nghĩa là Công cụ lưu trữ có thể bỏ qua việc đọc các trang dữ liệu LOB khỏi bộ lưu trữ vật lý hoàn toàn. Tối đa hóa tiềm năng loại bỏ có thể yêu cầu thiết kế cẩn thận , bao gồm cả sự phụ thuộc vào thứ tự chỉ mục được nhóm vào thời điểm chỉ mục Cột được xây dựng.

Nhà điều hành kế hoạch cụ thể

SQL Server 2012 giới thiệu một chế độ thực thi mới gọi là Batch Mode. Trong chế độ này, các gói khoảng 1000 hàng được truyền giữa các toán tử, cải thiện đáng kể hiệu quả sử dụng bộ xử lý. Trong mỗi gói, dữ liệu cột được biểu diễn dưới dạng vectơ. Không phải tất cả các toán tử kế hoạch đều hỗ trợ vận hành chế độ hàng loạt, nhưng các ví dụ về các toán tử bao gồm Quét chỉ mục cột, Tham gia Hash Hash, Xây dựng bảng Batch, Bộ lọc bitmap, Tổng hợp Hash (không phải tổng hợp vô hướng ), Bộ lọc và Tính toán vô hướng (để chiếu và biểu thức đánh giá). Các kế hoạch thực hiện truy vấn đã được tăng cường để hiển thị chế độ thực hiện ước tính và thực tế.

Chống mẫu

Có một số lượng lớn các hạn chế trong bản phát hành đầu tiên, bao gồm các ràng buộc về các loại dữ liệu được phép . Hầu hết các loại phổ biến được hỗ trợ; các kiểu dữ liệu được hỗ trợ bao gồm DECIMALvới một lớn hơn độ chính xác hơn 18 chữ số, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, các loại CLR, và (VAR)BINARY.

Sử dụng các loại chuỗi , OUTER JOIN, IN,EXISTS , NOT IN, OR, UNION ALLcó thể dẫn đến giảm đáng kể hiệu suất (Row Chế độ thực hiện), trừ khi cách giải quyết được tuyển dụng mà thường liên quan đến việc viết lại cú pháp không bình thường như thể hiện trong các bài viết liên quan trong phần này.

Thêm thông tin

Remus Rusanu đã viết một cái nhìn tổng quan tuyệt vời ở đâ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.