Иногда требуется разбить большую таблицу, но в ней нет столбца, по которому можно было бы провести разделение по диапазону. Появившееся в Oracle 8i хеш-разделение (hash partitioning) позволяет указать только количество разделов и столбцы, по которым проводится разделение (ключ разделения), а собственно распределением строк по разделам занимается Oracle.
При вставке строк в разделенную таблицу Oracle пытается равномерно распределить данные между разделами, применяя к данным ключа разделения хеш-функцию. Значение, возвращаемое хеш-функцией, определяет в какой раздел попадет строка. Если столбцы ключа разделения включены в инструкцию WHERE оператора SELECT, DELETE или UPDATE, то для определения того, какой раздел просматривать, Oracle использует хеш-функцию. Покажем, как можно разделить таблицу деталей хешированием столбца part_nbr:
create table part ( part_nbr varchar2(20) not null, name varchar2(50) not null, supplier_id number(6) NOT null,
iriventory_qty number(6) not null,
status varchar2(10) not null,
unit_cost number(8,2),
resupply_date date
)
PARTITION BY HASH (part_nbr) (partition part1 tablespace p1, partition part2 tablespace p2,
partition part3 tablespace p3,
partition part4 tablespace p4);
Чтобы равномерно распределить данные между разделами, необходимо выбирать в качестве ключей разделения столбцы большой мощности (high cardinality). Говорят, что множество столбцов обладает большой мощностью, если количество различных значений достаточно велико по сравнению с размером таблицы.[1] Выбор в качестве ключа разделения столбца большой мощности гарантирует равномерное распределение данных по разделам. В противном случае разделы получаются несбалансированными, что делает производительность непредсказуемой и усложняет администрирование.
[1] Самой высокой мощностью обладает уникальный ключ, так как в нем все строки имеют различные значения. Примером столбца низкой мощности является столбец стран в таблице клиентов, содержащей миллионы записей.