Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 05 create_table.DOC
Скачиваний:
32
Добавлен:
20.03.2016
Размер:
233.47 Кб
Скачать
      1. Изменение индекса

Изменение индекса созданного явным образом может осуществляться командой

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 характеристики памяти индекса

      1. Удаление индексов

Неявные индексы (созданные на основе ограничений целостности базы данных) удалить нельзя. Однако, если отключить ограничение целостности, индекс для доступа к строкам таблицы больше использоваться не будет до момента включения ограничения.

Удаление явных индексов может осуществляться командой

DROP INDEX имя_индекса

      1. Битовые индексы

СУБД ORACLE8 позволяет создавать битовые индексы.

Битовые индексы используются в том случае когда количество возможных значений столбца невелико и объем таблицы достаточно мал.

Битовый индекс создается командой

CREATEBITMAPINDEXимя_индексаONимя_таблицы (список полей)

    1. Кластеры

      1. Создание кластеров

Кластер – объект который используется для совместного хранения строк различных таблиц. Таблицы, используемые для создания кластера, часто объединяются в запросах. Если таблица в основном используется индивидуально, она, как правило, не используется для создания кластера.

Записи Т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.

Соседние файлы в папке Лекции