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 | 
Классы индексов
Плотный- охватывает все записи- Разреженный - охватывает только записи, находящиеся в блоке