Кластеризація є методом спільного зберігання родинних даних (таблиць). Кластер - це структура пам'яті, в якій зберігається набір таблиць (в одних і тих же блоках пам'яті). Кластерізуемие таблиці повинні мати загальні стовпці, що використовуються для з'єднання (наприклад, первинний ключ таблиці ТОВАРИ і зовнішній ключ таблиці ПОСТАВКИ. Рис. 4.8, б).
Рис.4.8. Некластерізованний (а) і Групові (б) дані
Кластерний ключ (КК) - це поле або набір полів, загальних для всіх кластерізуемих таблиць. Кожна таблиця, яка зберігається в кластері, повинна мати поля, які відповідають типам і розмірам полів кластерного ключа. Кількість полів в кластерному ключі обмежена (наприклад, для СУБД Oracle8 це обмеження дорівнює 16).
Спільне зберігання даних означає, що на одній сторінці або в одному блоці пам'яті зберігаються дані з усіх кластеризованих таблиць, які мають однакове значення кластерного ключа. Фізично це зазвичай реалізується так: на початку сторінки (блоку) зберігається запис з таблиці, для якої кластерний ключ є первинним (або унікальним), а слідом за нею розташовуються записи з іншої таблиці (таблиць), що мають ті ж значення кластерного ключа. Фактично, дані зберігаються у вигляді з'єднання таблиць за значеннями кластерного ключа. Тому з'єднання кластеризованих таблиць в порівнянні з роздільно збереженими таблицями виконується в 3-6 разів швидше.
Якщо всі дані, що відносяться до одного значення кластерного ключа, не поміщаються в одному блоці, то виділяється новий блок пам'яті і попередній блок зберігає посилання на нього. Але якщо система дозволяє через міняти розмір блоку (зокрема, СУБД Oracle), при створенні кластера бажано встановити розмір блоку виходячи з оцінки середнього обсягу записів з однаковими значеннями кластерного ключа. Якщо ж записи з однаковим значенням КК займають лише частину блоку (наприклад, в середньому 1К при розмірі блоку 4К), то при створенні таблиці кластера можна вказати кількість значень КК на один блок.
Значення кластерного ключа таблиці можуть оновлюватися. Але це оновлення може викликати фізичне переміщення записи, тому що розташування запису залежить від значення кластерного ключа. Тому часто оновлюються атрибути не є хорошими кандидатами на входження в кластерний ключ.
Два основних переваги кластерів:
- Зменшується час з'єднання таблиць за значенням кластерного ключа.
- Кожне значення кластерного ключа зберігається тільки один раз, за рахунок чого досягається економія пам'яті.
З іншого боку, наявність кластерів зазвичай збільшує час виконання операції додавання запису (INSERT): система витрачає додатковий час на пошук блоку, в який потрібно помістити новий запис.