6. Индексы

advertisement
Хранение таблиц
• По строкам
• По столбцам
• Строки нескольких таблиц группируются по
общему атрибуту
Схема блока с таблицей смещения
записей
• Обычно длинные объекты CLOB и BLOB
хранятся отдельно.
• Поля varchar: длина + значение.
• При добавлении столбца строки, в которые
не было добавлено значение нового
атрибута, физически не изменяются.
• Поиск в неупорядоченном файле – в
среднем половина файла m/2.
Таблица, в которой записи
упорядочены по значению ключа
• Полезны при частых интервальных
запросах
• Поиск быстрее log2m
Индекс - это
• Избыточная структура
• Служит для ускорения поиска
• Простейший индекс строится на основе
В-дерева
Поиск с помощью индекса:
• На точное значение
• На интервал
• На значение нескольких атрибутов
Способы определения индекса:
• автоматическое создание индекса при
создании первичного ключа;
• автоматическое создание индекса при
определении ограничения целостности
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) <= ключ(2) <= ... <= ключ(n);
• в странице дерева Nm находятся ключи k со значениями ключ(m) <= k <=
ключ(m+1).
• Листовая страница обычно имеет следующую структуру:
• Листовая страница обладает следующими свойствами:
• ключ(1) < ключ(2) < ... < ключ(t);
• сп(r) - упорядоченный список идентификаторов кортежей (tid),
включающих значение ключ(r);
Пример В-дерева
Вставка в В-дерево
Кластерный индекс
• Таблица упорядочена по значению ключа
• Для каждого блока данных в индекс
помещаем минимальное значение ключа и
адрес блока.
• С индексными блоками поступаем так же,
наращивая уровни, пока не появится
уровень из одного блока.
Кластерный индекс
Некластерный индекс
• В индексный файл для каждой записи
помещаем пару: значение ключа +
- адрес записи, если нет кластерного индекса
- указатель на значение записи из кластерного
индекса
• В новый индексный уровень помещаем
минимальное значение ключа и адрес
индексного блока.
• Наращивая уровни, пока не появится уровень
из одного блока.
Некластерный индекс
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 означает, что в данной
строке атрибут принимает заданное значение
Индексы на основе битовых карт
• Индексы на основе битовых карт обычно создаются
быстрее и могут занимать удивительно мало места.
• Размер индекса на основе битовых карт существенно
зависит от распределения данных.
• Индексы на основе битовых карт обычно выбираются
стоимостным оптимизатором, если для выполнения
запроса можно использовать несколько таких индексов.
• Изменения столбцов, входящих в индексы на основе
битовых карт, а также вставки и удаления данных могут
вызывать существенные конфликты блокировок.
• Изменения столбцов, входящих в индексы на основе
битовых карт, а также вставки и удаления данных могут
весьма существенно "ухудшать" индексы.
Download