Teradata - Chỉ mục chính được phân vùng

Chỉ mục chính được phân vùng (PPI) là một cơ chế lập chỉ mục hữu ích trong việc cải thiện hiệu suất của các truy vấn nhất định. Khi các hàng được chèn vào bảng, chúng được lưu trữ trong AMP và được sắp xếp theo thứ tự băm hàng của chúng. Khi một bảng được xác định bằng PPI, các hàng được sắp xếp theo số phân vùng của chúng. Trong mỗi phân vùng, chúng được sắp xếp theo hàm băm hàng của chúng. Các hàng được gán cho một phân vùng dựa trên biểu thức phân vùng được xác định.

Ưu điểm

  • Tránh quét toàn bộ bảng cho các truy vấn nhất định.

  • Tránh sử dụng chỉ mục phụ yêu cầu cấu trúc vật lý bổ sung và bảo trì I / O bổ sung.

  • Truy cập một tập hợp con của một bảng lớn một cách nhanh chóng.

  • Bỏ nhanh dữ liệu cũ và thêm dữ liệu mới.

Thí dụ

Hãy xem xét bảng Đơn hàng sau với Chỉ mục chính trên OrderNo.

StoreNo OrderNo Ngày đặt hàng OrderTotal
101 7501 2015-10-01 900
101 7502 2015-10-02 1.200
102 7503 2015-10-02 3.000
102 7504 2015-10-03 2.454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2.454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

Giả sử rằng các bản ghi được phân phối giữa các AMP như được hiển thị trong các bảng sau. Bản ghi được lưu trữ trong AMP, được sắp xếp dựa trên băm hàng của chúng.

AMP 1

RowHash OrderNo Ngày đặt hàng
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash OrderNo Ngày đặt hàng
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Nếu bạn chạy truy vấn để trích xuất các đơn đặt hàng cho một ngày cụ thể, thì trình tối ưu hóa có thể chọn sử dụng Quét toàn bảng, sau đó tất cả các bản ghi trong AMP có thể được truy cập. Để tránh điều này, bạn có thể xác định ngày đặt hàng là Chỉ mục chính được phân vùng. Khi các hàng được chèn vào bảng đơn hàng, chúng được phân vùng theo ngày đặt hàng. Trong mỗi phân vùng, chúng sẽ được sắp xếp theo hàm băm hàng của chúng.

Dữ liệu sau đây cho biết cách các bản ghi sẽ được lưu trữ trong AMP, nếu chúng được phân vùng theo Ngày đặt hàng. Nếu một truy vấn được chạy để truy cập các bản ghi theo Ngày đặt hàng, thì chỉ phân vùng chứa các bản ghi cho thứ tự cụ thể đó mới được truy cập.

AMP 1

Vách ngăn RowHash OrderNo Ngày đặt hàng
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

Vách ngăn RowHash OrderNo Ngày đặt hàng
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

Sau đây là một ví dụ để tạo một bảng với chỉ mục chính của phân vùng. Mệnh đề PARTITION BY được sử dụng để định nghĩa phân vùng.

CREATE SET TABLE Orders (
   StoreNo SMALLINT, 
   OrderNo INTEGER, 
   OrderDate DATE FORMAT 'YYYY-MM-DD', 
   OrderTotal INTEGER 
) 
PRIMARY INDEX(OrderNo) 
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

Trong ví dụ trên, bảng được phân vùng theo cột OrderDate. Sẽ có một phân vùng riêng biệt cho mỗi ngày.