Секционированный первичный индекс (PPI) — это механизм индексации, который полезен для повышения производительности определенных запросов. Когда строки вставляются в таблицу, они сохраняются в AMP и располагаются в порядке их хэширования. Когда таблица определена с помощью PPI, строки сортируются по номеру раздела. Внутри каждого раздела они располагаются по хешу строк. Строки присваиваются разделу на основе определенного выражения раздела.
преимущества
-
Избегайте полного сканирования таблицы для определенных запросов.
-
Избегайте использования вторичного индекса, который требует дополнительной физической структуры и дополнительного обслуживания ввода-вывода.
-
Быстрый доступ к подмножеству большой таблицы.
-
Быстро отбросьте старые данные и добавьте новые.
Избегайте полного сканирования таблицы для определенных запросов.
Избегайте использования вторичного индекса, который требует дополнительной физической структуры и дополнительного обслуживания ввода-вывода.
Быстрый доступ к подмножеству большой таблицы.
Быстро отбросьте старые данные и добавьте новые.
пример
Рассмотрим следующую таблицу «Заказы» с первичным индексом для номера заказа.
Хранить нет | № заказа | Дата заказа | Весь заказ |
---|---|---|---|
101 | 7501 | 2015-10-01 | 900 |
101 | 7502 | 2015-10-02 | 1200 |
102 | 7503 | 2015-10-02 | 3000 |
102 | 7504 | 2015-10-03 | 2454 |
101 | 7505 | 2015-10-03 | 1201 |
103 | 7506 | 2015-10-04 | 2454 |
101 | 7507 | 2015-10-05 | 1201 |
101 | 7508 | 2015-10-05 | 1201 |
Предположим, что записи распределены между AMP, как показано в следующих таблицах. Записанные данные хранятся в AMP, сортируются по их хешу строк.
RowHash | № заказа | Дата заказа |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | № заказа | Дата заказа |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
Если вы запустите запрос для извлечения заказов на определенную дату, тогда оптимизатор может выбрать использование полного сканирования таблицы, тогда будут доступны все записи в AMP. Чтобы избежать этого, вы можете определить дату заказа как первичный индекс с разделами. Когда строки вставляются в таблицу заказов, они разбиваются по дате заказа. Внутри каждого раздела они будут упорядочены по хешу строк.
Следующие данные показывают, как записи будут храниться в AMP, если они разбиты по дате заказа. Если запрос выполняется для доступа к записям по дате заказа, то будет доступен только раздел, содержащий записи для этого конкретного заказа.
раздел | RowHash | № заказа | Дата заказа |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
раздел | RowHash | № заказа | Дата заказа |
---|---|---|---|
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. Там будет один отдельный раздел на каждый день.