Учебники

Teradata — разделенный первичный индекс

Секционированный первичный индекс (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, сортируются по их хешу строк.

AMP 1

RowHash № заказа Дата заказа
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash № заказа Дата заказа
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Если вы запустите запрос для извлечения заказов на определенную дату, тогда оптимизатор может выбрать использование полного сканирования таблицы, тогда будут доступны все записи в AMP. Чтобы избежать этого, вы можете определить дату заказа как первичный индекс с разделами. Когда строки вставляются в таблицу заказов, они разбиваются по дате заказа. Внутри каждого раздела они будут упорядочены по хешу строк.

Следующие данные показывают, как записи будут храниться в AMP, если они разбиты по дате заказа. Если запрос выполняется для доступа к записям по дате заказа, то будет доступен только раздел, содержащий записи для этого конкретного заказа.

AMP 1

раздел 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

AMP 2

раздел 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. Там будет один отдельный раздел на каждый день.