21. Использование индексов для повышения производительности. Виды индексов
Индекс - это механизм, который направлен на оптимизацию поиска.
Таблица №1
Табельный | ФИО | Группа |
---|---|---|
308372 | Либченко М. | M32011 |
Таблица №2
Группа | О. Программа |
---|---|
M32011 | Программирование |
def
Индекс - это метод, который позволяет получить структуру данных, предназначенную для оптимизации поиска.
Как выглядит индекс:
Ключ | Значение (адрес кортежа в таблице) |
---|---|
key | value |
Варианты индексов
1. Первичный индекс
def
Первичный индекс - файл упорядочен по первичному ключу, и по нему же построен индекс, так что гарантируется уникальность каждой записи (кортежа)
Ключ (Табельный) | Значение (адрес кортежа в таблице) |
---|---|
308372 | value |
Этот индкс можно переформатировать в какую-нибудь структуру данных, например, красно-чёрное дерево
- Хеш индекс
Ключ (хеш табельного) | Значение (адрес кортежа в таблице) |
---|---|
hashValue | value |
Для избавления от коллизий делаем ключ огромного размера
2. Кластеризованный индекс
def
Кластеризованный индекс - файл упорядочен по ключевому или неключевому атрибуту, по которому построен индекс, при этом несколько кортежей (кластер) соответствует одному значению индекса.
Ключ (хеш от ФИО) | Значение (адрес кортежа в таблице) |
---|---|
hashValue | value |
3. Вторичный индекс
def
Вторичный индекс - индекс, который построен по аттрибуту, отличному от того, по которому осуществлено упорядочивание
Первый вариант
Ключ (табельный) | Значение (адрес кортежа в таблице) |
---|---|
308372 | value |
При этом у нас сама таблица отсортирована по ФИО.
Проблема заключается в том, что нам может понадобиться часто балансировать структуры (деревья)
Второй вариант
Ключ (табельный) | Коэф сбалансированности | Значение (адрес кортежа в таблице) |
---|---|---|
308372 | balanceValue | value |
Классы индексов
Плотный
- охватывает все записи- Разреженный - охватывает только записи, находящиеся в блоке