Хранение таблиц По строкам По столбцам Строки нескольких таблиц группируются по общему атрибуту
Схема блока с таблицей смещения записей
Обычно длинные объекты CLOB и BLOB хранятся отдельно. Поля varchar: длина + значение. При добавлении столбца строки, в которые не было добавлено значение нового атрибута, физически не изменяются. Поиск в неупорядоченном файле – в среднем половина файла m/2.
Таблица, в которой записи упорядочены по значению ключа Полезны при частых интервальных запросах Поиск быстрее log 2 m
Индекс - это Избыточная структура Служит для ускорения поиска Простейший индекс строится на основе В-дерева
Поиск с помощью индекса: На точное значение На интервал На значение нескольких атрибутов
Способы определения индекса: автоматическое создание индекса при создании первичного ключа; автоматическое создание индекса при определении ограничения целостности UNIQUE; создание индекса с помощью команды CREATE INDEX.
::= CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX имя_индекса ON имя_таблицы(имя_столбца [ASC|DESC][,...n]) [[,] DROP_EXISTING] [ON имя_группы_файлов ]
UNIQUE Используется при необходимости ввода в определенное поле только уникальных значений. В индексируемом столбце желательно запретить хранение значений NULL. Запрещается выполнение команд INSERT и UPDATE, которые приведут к появлению дублирующих значений.
CLUSTERED Использует возможность физического индексирования данных В результате будут отсортированы данные в самой таблице согласно порядку этого индекса. Добавление информации в таблицу приводит к изменению физического порядка данных. Кластерным может быть только один индекс в таблице.
index-organised table Аналог clustered index Таблица хранится в виде В-дерева
Виды индексов: B-деревья Hash-индексы Индексы на основе битовых карт R-деревья
В-дерево Имеет внутренние и листовые страницы Листовые вершины находятся на самом нижнем уровне дерева, все остальные - внутренние В-дерево – сбалансированная структура, т.е. от корня до любой листовой страницы одинаковое число шагов листовые страницы связаны одно- или двунаправленным списком.
В-дерево В типовом случае структура внутренней страницы выглядит следующим образом: При этом выдерживаются следующие свойства: ключ(1)
Пример В-дерева
Вставка в В-дерево
Кластерный индекс Таблица упорядочена по значению ключа Для каждого блока данных в индекс помещаем минимальное значение ключа и адрес блока. С индексными блоками поступаем так же, наращивая уровни, пока не появится уровень из одного блока.
Кластерный индекс
Некластерный индекс В индексный файл для каждой записи помещаем пару: значение ключа + - адрес записи, если нет кластерного индекса - указатель на значение записи из кластерного индекса В новый индексный уровень помещаем минимальное значение ключа и адрес индексного блока. Наращивая уровни, пока не появится уровень из одного блока.
Некластерный индекс
Hash-индекс Create hash claster кластер1 on поле1… Create table имя_табл into кластер1 поле_табл as поле1
Hash-индекс Для размещения таблицы отводится заданное количество участков Есть функция hash(key)=n, где n – номер участка В памяти хранится таблица адресов участков Проблема – неравномерность размещения записей, возникновение коллизий
Индексы на основе битовых карт create bitmap index i4 on t1(town) Нужны тогда, когда у столбца может быть ограниченное число значений. В индекс входят: – значение столбца – битовая последовательность по количеству строк таблицы, в кот. 1 означает, что в данной строке атрибут принимает заданное значение
Индексы на основе битовых карт Индексы на основе битовых карт обычно создаются быстрее и могут занимать удивительно мало места. Размер индекса на основе битовых карт существенно зависит от распределения данных. Индексы на основе битовых карт обычно выбираются стоимостным оптимизатором, если для выполнения запроса можно использовать несколько таких индексов. Изменения столбцов, входящих в индексы на основе битовых карт, а также вставки и удаления данных могут вызывать существенные конфликты блокировок. Изменения столбцов, входящих в индексы на основе битовых карт, а также вставки и удаления данных могут весьма существенно "ухудшать" индексы.