
- •Работа с таблицами в системе управления базами данных oracle
- •Типы данных Oracle
- •Строки символов
- •Числовые типы
- •Двоичные данные
- •Дата и время
- •Преобразование типов данных
- •Правила сравнения типов данных
- •Значения Null
- •Псевдостолбцы
- •Объекты базы данных
- •Создание таблиц
- •Ограничения для таблиц и столбцов
- •Alter table
- •Удаление таблицы
- •Ввод данных в таблицы
- •Удаление таблицы
- •Представление
- •Индексы
- •Create sequence
- •Create synonym
- •Индексы
- •Работа с индексами
- •Явные и неявные индексы
- •Изменение индекса
- •Удаление индексов
- •Битовые индексы
- •Кластеры
- •Создание кластеров
- •Удаление кластеров
Изменение индекса
Изменение индекса созданного явным образом может осуществляться командой
ALTER INDEX [пользователь.] имя_индекса
[INITRANS M] [MAXTRANS K] [STORAGE (INITIAL M NEXT K PCTINCREASE N)]
имя пользователя - владельца индекса
Параметры INITRANS, MAXTRANS и STORAGE имеют использованию то же значение, что и в операторе CREATE TABLE
Параметры INITIALMINEXTENTSне могут быть изменены.
Изменение индексов созданных неявным образом осуществляется командой ALTERTABLEс включением или отключением индексов.
ALTER TABLE T1 ENABLE PRIMARY KEY USING INDEX характеристики памяти индекса
Удаление индексов
Неявные индексы (созданные на основе ограничений целостности базы данных) удалить нельзя. Однако, если отключить ограничение целостности, индекс для доступа к строкам таблицы больше использоваться не будет до момента включения ограничения.
Удаление явных индексов может осуществляться командой
DROP INDEX имя_индекса
Битовые индексы
СУБД ORACLE8 позволяет создавать битовые индексы.
Битовые индексы используются в том случае когда количество возможных значений столбца невелико и объем таблицы достаточно мал.
Битовый индекс создается командой
CREATEBITMAPINDEXимя_индексаONимя_таблицы (список полей)
Кластеры
Создание кластеров
Кластер – объект который используется для совместного хранения строк различных таблиц. Таблицы, используемые для создания кластера, часто объединяются в запросах. Если таблица в основном используется индивидуально, она, как правило, не используется для создания кластера.
Записи Т2
Индекс
кластера
Записи Т1
Запрос к таблицам
Рис2. Кластеры и их использование
Порядок создания и использования кластеров следующий
создание кластера;
создание таблиц, входящих в кластер;
создание индекс кластера.
Создание кластера осуществляется командой
CREATECLUSTER[пользователь.]имя_кластера (столбец тип [,столбец тип] ...)
[PCTUSED M] [PCTFREE N]
[SIZE L]
[INITRANS K] [MAXTRANS P]
[TABLESPACE имя_табличного_пространства]
[STORAGEхранилище]
Кластеризация позволяет собрать строки разных таблиц, имеющие одинаковый ключ кластера в один блок ORACLE.
Кластеризация обеспечивает более высокий уровень управления физическим хранением строк данных в базе. Она позволяет уменьшить время доступа к кластеризованным таблицам и снизить необходимую таблице память. С точки зрения пользователя кластеризованные таблицы трактуются идентично некластеризованным так как для их использования не требуется никаких модификаций SQL - операторов.
Общее правило - кластеризовать таблицы, часто объединяемые вместе. Хотя кластеризация может снизить время доступа при объединении, она может его увеличить при полном сканировании таблиц, входящих в мультитабличные кластеры.
Ключ кластера определяет, каким образом ORACLE будет группировать строки в кластере. Строки с одинаковым значением ключа кластера будут физически храниться вместе.
Столбцы, определяемые в операторе CREATE CLUSTER, становятся ключом кластера. Эти столбцы должны соответствовать и по типу данных и по размеру столбцам каждой кластеризованной таблицы. Столбцы таблиц, составляющие ключ кластера, не обязательно должны совпадать по имени.
Каждое отличающееся значение ключа кластера запоминается лишь однажды вне зависимости от числа строк, в которых оно присутствует. Это экономит дисковую память и увеличивает производительность многих операций.
Каждое значение ключа кластера включает в себя:
* ROWID (19 байтов)
* внутреннюю память для кластеризованных столбцов (длина в байтах каждого столбца плюс 1 байт заголовка)
Например, для следующего оператора:
CREATECLUSTERXYZ(ABCCHAR(5),MNOCHAR(7))
создается ключевое значение из 33 байтов:
* 19 байтов на ROWID
* 5 и 7 байтов на столбцы ABC и MNO
* 2 байта на заголовки для обоих столбцов
Максимально допустимый размер ключа кластера зависит от операционной системы.
Для кластеризованных столбцов не обязательно задание ограничений, их можно задавать для отдельных таблиц, входящих в кластер.
Как и в случае с индексом, порядок столбцов в ключе кластера влияет на структуру индекса кластера.
Size ORACLE использует параметр SIZE для определения памяти, резервируемой для строк, соответствующих одному ключу кластера и, следовательно, максимального количества ключей кластера на один блок ORACLE. Если SIZE не является делителем количества байтов в блоке ORACLE, система будет использовать ближайший следующий делитель. Если SIZE больше размера физического блока ORACLE, будет браться значение, равное блоку (другими словами - как минимум один ключ на блок).
Если опущена фраза SIZE, ORACLE назначит один ключ на физический блок.
Кроме того, при назначении реального значения SIZE для кластера ORACLE принимает во внимание длину ключа кластера (больший ключ требует большего SIZE). Посмотреть действительный размер SIZE можно, запросив столбец KEY_SIZE таблицы словаря данных USER_CLUSTERS.
Хотя максимальное число ключей кластера и фиксировано для данного кластера, ORACLE не резервирует одинаковую память для каждого ключа. Например, если Вы специфицировали SIZE, приведший к шести ключам на блок ORACLE, 6 ключей кластера вместе со своими строками может быть любого размера, пока их общая длина не превысит размер блока. Ключи кластера переменной длины позволяют запоминать данные более эффективно, нежели - фиксированной длины, так как данные, запоминающиеся на один ключ кластера редко бывают фиксированными.
Значение SIZE, меньшее средней длины данных на ключ кластера, может привести к распространению данных одного ключа на несколько блоков. И наоборот, чересчур большое значение приведет к бесполезной трате памяти базы.
Таблицы добавляются к кластеру с помощью фразы CLUSTER оператора CREATE TABLE. Кластер может включать в себя до 16 таблиц, хотя затраты производительности растут после кластеризации 4 – 5 таблиц. Таблицы с данными типа LONG также могут кластеризоваться.
Все таблицы кластера используют параметры распределения памяти кластера, включающие следующие: PCTUSED, PCTFREE, INITRANS, MAXTRANS, TABLESPACE, STORAGE.
Индекс кластера обеспечивает быстрый доступ к строкам, базируясь на ключе кластера.
Индекс кластера необходимо создать до выполнения каких-либо DML - операций над его таблицами. Его необходимо создать вручную, пользуясь следующим синтаксисом:
CREATEINDEXinameONCLUSTERcname
При создании индекса не задается имя столбца так как индекс кластера создается на ключе кластера, определенном оператором CREATE CLUSTER.
Пример. Чтобы создать кластер PERSONNEL, содержащий таблицы DEPT и EMP, специфицировав параметры памяти для кластеризованных таблиц, необходимо выполнить:
CREATE CLUSTER PERSONNEL (department_number NUMBER) STORAGE (INITIAL 100K NEXT 50K PCTINCREASE 10)
Для кластеризации в нем таблиц EMP и DEPT следует ввести:
CREATE TABLE EMP
(empno NUMBER NOT NULL, deptno NUMBER NOT NULL,... )
CLUSTER PERSONNEL (deptno)
CREATE TABLE DEPT
(deptno NUMBER NOT NULL,
dname CHAR(9),
loc CHAR(9))
CLUSTER PERSONNEL (deptno)
И наконец, для создания индекса кластера:
CREATE INDEX idx_personnel ON CLUSTER personnel
Создав индекс кластера, можно вставлять строки в таблицы EMP и DEPT.