Хеширование не рекомендуется
Когда нельзя сразу выделить столько памяти, сколько требуется таблице. Если потребуется выделять таблице дополнительную память, эта память будет отведена под коллизионные страницы, что сильно ухудшит производительность (это следует из формулы, по которой рассчитывается адрес записи).
Большинство запросов выбирает записи в некотором интервале значений ключа. Хеширование не дает здесь преимуществ, так как записи обычно не упорядочены, и система использует последовательное чтение.
Кластеризация данных (1)
Кластеризация – хранение в одной области памяти таблиц, связанных внешними ключами (одна роди-
тельская таблица, одна/несколько подчиненных таблиц).
Для размещения записей используется значение внешнего ключа (все данные с одинаковым значением внешнего ключа будут в одном блоке данных – кластере).
Для таблиц ДЕТИ, ТРУДОВАЯ КНИЖКА, ОТПУСКА
внешним ключом будет первичный ключ Идентифи-
катор сотрудника таблицы СОТРУДНИКИ. Тогда при кластеризации все данные будут храниться в одном блоке данных.
Кластеризация данных (2)
Таблицы в кластере должны иметь общие столбцы, используемые для соединения (первичный ключ таблицы ТОВАРЫ и внешний ключ таблицы ПОСТАВКИ).
Кластерный ключ (КК) – поле (набор полей), общих для всех таблиц кластера.
Каждая таблица в кластере должна иметь поля, соответствующие типам и размерам полей КК.
Количество полей в КК ограничено (для Oracle – 16).
Некластеризованные и кластеризованные данные
Реализация кластеризации (1)
Совместное хранение данных: на одной странице или в одном блоке памяти хранятся данные из всех кластеризованных таблиц, имеющие одинаковое значение КК.
Физическая реализация: в начале страницы (блока) хранится запись из таблицы, для которой КК является первичным (уникальным), а вслед за ней располагаются записи из другой таблицы (таблиц), имеющие те же значения КК.
Фактически, данные хранятся в виде соединения таблиц по значениям КК. Соединение кластеризованных таблиц (по сравнению с раздельно хранимыми) в 3-6 раз быстрее.