Кластерами называют две или более таблиц, которые физически хранятся вместе, чтобы использовать преимущества совпадающих между таблицами столбцов. Если две таблицы имеют идентичный столбец и вам, к примеру, часто приходится соединять таблицы по нему, то становится выгодно хранить значения общих столбцов в одном и том же блоке данных. Целью такой организации является сокращение объема ввода-вывода с увеличением скорости доступа при соединении связанных таблиц. Однако кластеры понижают производительность операторов INSERT, поскольку для хранения данных нескольких таблиц требуется больше блоков.
Для создания кластеризованных таблиц сначала необходимо создать кластер. В следующем примере демонстрируется создание кластера по имени emp_dept, который будет хранить таблицы emp и dept, кластеризованные по столбцу deptno.
SQL> CREATE CLUSTER emp_dept(deptno NUMBER(3)) 2 TABLESPACE users; Cluster created. SQL>
Создать две таблицы — emp и dept — как составные части кластера можно следующим образом:
SQL> CREATE TABLE dept( 2 deptno NUMBER(3) PRIMARY KEY) 3* CLUSTER emp_dept (deptno); Table created. SQL> SQL> CREATE TABLE emp( 2 empno NUMBER(5) PRIMARY KEY, 3 ename VARCHAR2(15) NOT NULL, 4 deptno NUMBER(3) REFERENCES dept) 5* CLUSTER emp_dept(deptno); Table created. SQL>
Удостоверьтесь в том, что включаете в кластеры только те таблицы базы данных Oracle Database, к которым приложение часто обращается в операторах соединения.
Хеш-кластеры
При необходимости можно создать хеш-кластер и поместить в него таблицы. В этом случае строки извлекаются в соответствии с результатом некоторой хеш-функции. Для нахождения любого значения строки все, что потребуется сделать — это получить хеш значение для ключа кластера, так что единственная операция ввода-вывода выдаст данные нужной строки и обеспечит более эффективную производительность. Когда приложение использует запросы по эквивалентности, скажем, запрос, который возвращает все строки для региона 10, то хеш-кластеры являются более подходящим выбором, чем обычная таблица с индексами. Причина в том, что база данных хеширует специфицированный ключ кластера, и значение хеш-ключа непосредственно указывает на область диска,в которой база хранит строки. Ниже приведен простой пример создания хеш-кластера в базе данных Oracle Database 12c.
SQL> CREATE CLUSTER emp_dept(deptno NUMBER(3)) 2 TABLESPACE users 3* HASH IS deptno HASHKEYS 200; Cluster created. SQL>
После создания хеш-кластера можно создавать его таблицы точно так же, как это делается для обычного кластера. Значение HASHKEYS специфицирует максимальное количество уникальных хеш-значений, которые могут быть сгенерированы хеш-функцией.