- Teradata 教程
- Teradata - 首頁
- Teradata 基礎
- Teradata - 簡介
- Teradata - 安裝
- Teradata - 架構
- Teradata - 關係型概念
- Teradata - 資料型別
- Teradata - 表
- Teradata - 資料操作
- Teradata - SELECT 語句
- 邏輯與條件運算子
- Teradata - 集合運算子
- Teradata - 字串操作
- Teradata - 日期/時間函式
- Teradata - 內建函式
- Teradata - 聚合函式
- Teradata - CASE 和 COALESCE
- Teradata - 主索引
- Teradata - 連線
- Teradata - 子查詢
- Teradata 高階
- Teradata - 表型別
- Teradata - 空間概念
- Teradata - 次級索引
- Teradata - 統計
- Teradata - 壓縮
- Teradata - Explain
- Teradata - 雜湊演算法
- Teradata - 連線索引
- Teradata - 檢視
- Teradata - 宏
- Teradata - 儲存過程
- Teradata - 連線策略
- Teradata - 分割槽主索引
- Teradata - OLAP 函式
- Teradata - 資料保護
- Teradata - 使用者管理
- Teradata - 效能調優
- Teradata - FastLoad
- Teradata - MultiLoad
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用資源
- Teradata - 問答
- Teradata - 快速指南
- Teradata - 有用資源
- Teradata - 討論
Teradata - 分割槽主索引
分割槽主索引 (PPI) 是一種索引機制,可用於提高某些查詢的效能。當行插入到表中時,它們儲存在 AMP 中,並按其行雜湊順序排列。當表使用 PPI 定義時,行按其分割槽號排序。在每個分割槽內,它們按其行雜湊排列。行根據定義的分割槽表示式分配到分割槽。
優勢
避免對某些查詢進行全表掃描。
避免使用需要額外物理結構和額外 I/O 維護的二級索引。
快速訪問大型表的子集。
快速刪除舊資料並新增新資料。
示例
考慮以下具有 OrderNo 主索引的 Orders 表。
| 門店編號 | 訂單號 | 訂單日期 | 訂單總額 |
|---|---|---|---|
| 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 |
假設記錄在 AMP 之間分佈,如下表所示。記錄儲存在 AMP 中,根據其行雜湊排序。
| 行雜湊 | 訂單號 | 訂單日期 |
|---|---|---|
| 1 | 7505 | 2015-10-03 |
| 2 | 7504 | 2015-10-03 |
| 3 | 7501 | 2015-10-01 |
| 4 | 7508 | 2015-10-05 |
| 行雜湊 | 訂單號 | 訂單日期 |
|---|---|---|
| 1 | 7507 | 2015-10-05 |
| 2 | 7502 | 2015-10-02 |
| 3 | 7506 | 2015-10-04 |
| 4 | 7503 | 2015-10-02 |
如果您執行查詢以提取特定日期的訂單,則最佳化器可能會選擇使用全表掃描,然後可以訪問 AMP 中的所有記錄。為避免這種情況,您可以將訂單日期定義為分割槽主索引。當行插入到 orders 表中時,它們按訂單日期進行分割槽。在每個分割槽內,它們將按其行雜湊排序。
以下資料顯示如果按訂單日期進行分割槽,記錄將如何儲存在 AMP 中。如果執行查詢以按訂單日期訪問記錄,則將只訪問包含該特定訂單記錄的分割槽。
| 分割槽 | 行雜湊 | 訂單號 | 訂單日期 |
|---|---|---|---|
| 0 | 3 | 7501 | 2015-10-01 |
| 1 | 1 | 7505 | 2015-10-03 |
| 1 | 2 | 7504 | 2015-10-03 |
| 2 | 4 | 7508 | 2015-10-05 |
| 分割槽 | 行雜湊 | 訂單號 | 訂單日期 |
|---|---|---|---|
| 0 | 2 | 7502 | 2015-10-02 |
| 0 | 4 | 7503 | 2015-10-02 |
| 1 | 3 | 7506 | 2015-10-04 |
| 2 | 1 | 7507 | 2015-10-05 |
以下是如何建立具有分割槽主索引的表的示例。使用 PARTITION BY 子句定義分割槽。
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 );
在上述示例中,表按 OrderDate 列進行分割槽。每天將有一個單獨的分割槽。
廣告