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.
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 |
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.
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 |
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.