- •Физические модели баз данных
- •Внешние устройства хранения информации
- •Физическая модель
- •Физическая модель
- •Физическая модель
- •Последовательная неупорядоченная организация файла
- •Метод дихотомии
- •Последовательная упорядоченная организация файла
- •Хеширование данных
- •Хеширование данных
- •Хеширование данных
- •Хеширование данных
- •Хеширование данных
- •Индексные файлы
- •Файлы с плотным индексом
- •Файлы с неплотным индексом
- •Многоуровневые индексы
- •Вторичные ключи
- •Вторичные ключи
- •Индексы в Transact-SQL
- •Индексы в Transact-SQL
- •Индексы в Transact-SQL
- •Примеры
Хеширование данных
Несвязанная область переполнения
PK
Основная область
|
0 |
20 |
Петров2 |
Адрес = |
1 |
11 |
Иванов1 |
PK mod5 |
2 |
7 |
Петров |
|
|||
|
3 |
18 |
Сидоров1 |
|
4 |
24 |
Иванов2 |
Область переполнения (последовательное неупорядоченное хранение)
26 |
Сидоров3 |
27 |
Пушкин |
31 |
Пушкин2 |
Хеширование данных
Связанная область переполнения
|
|
|
Адрес в области |
|
|
Основная область |
переполнения |
|
|
|
|
0 |
20 |
Петров2 |
- |
1 |
11 |
Иванов1 |
2 |
2 |
7 |
Петров |
1 |
3 |
18 |
Сидоров1 |
- |
4 |
24 |
Иванов2 |
- |
|
Область переполнения |
|
|
|
(связанные списки синонимов) |
Вставка новых синонимов |
|||
0 |
26 |
Сидоров3 |
- |
в начало списка |
|
||||
1 |
27 |
Пушкин |
- |
|
2 |
31 |
Сидоров4 |
0 |
|
|
3
Хеширование данных
Свободное замещение
|
|
|
|
предыдущий |
|
|
следующий |
|
|
|
|
Основная |
|
|
|
|
|
0 |
22 |
Петров2 |
- |
- |
|
|
|
1 |
12 |
Иванов1 |
- |
9 |
N = 11 |
|
|
2 |
24 |
Петров |
- |
6 |
|
|
|
3 |
14 |
Сидоров1 |
- |
- |
|
|
|
4 |
26 |
Иванов2 |
- |
- |
|
|
|
5 |
45 |
Сидоров4 |
9 |
8 |
|
|
|
6 |
13 |
Пушкин |
2 |
- |
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
34 |
Сидоров4 |
5 |
- |
|
|
|
9 |
23 |
Сидоров5 |
1 |
5 |
|
|
|
|
|||||
вставка |
10 |
|
|
|
|
|
|
|
|
|
|
|
|
? |
23 |
Сидоров5 |
? |
? |
Индексные файлы
Снижение времени поиска:
Бинарный поиск
Часть индексного файла – в оперативной памяти
Файлы с плотным индексом
Индексный файл |
Основная область |
Страница 2 Страница 1
Значение |
Номер |
ключа |
записи |
5 |
4 |
11 |
6 |
12 |
1 |
107 |
5 |
Ключ |
Неключевые атрибуты |
12 |
|
5
107 11
Новая
индексная
запись
Новая запись
2
Файлы с неплотным индексом
Индексный файл
|
Значение |
Номер |
|
ключа |
страницы |
|
первой |
|
1 |
записи |
|
Страница |
5 |
1 |
|
||
|
12 |
2 |
Страница 2 |
|
|
Основная область
Ключ |
Неключевые атрибуты |
5 |
|
запись
2
Многоуровневые индексы
Индексный файл 1 |
Индексный файл 2 |
Основная область |
||
|
||||
|
|
Значение |
Номер |
Ключ Неключевые атрибуты |
Значение |
Номер |
|
||
ключа |
страницы |
2 |
||
ключа |
страницы |
первой |
|
3 |
первой |
|
записи |
|
|
записи |
|
2 |
|
6 |
2 |
|
|
||
|
9 |
|
|
|
23 |
|
|
|
|
|
15 |
|
9 |
|
|
|
|
||
|
|
|
|
10 |
|
|
23 |
|
13 |
|
|
|
|
15 |
|
|
|
|
18 |
|
|
|
|
21 |
|
|
|
|
23 |
|
|
|
|
33 |
|
|
|
|
46 |
|
|
|
|
53 |
Вторичные ключи
Вторичный ключ – произвольный
набор атрибутов, которому соответствует набор искомых записей в операции выборки (значения ключа – не уникальные)
Вторичные ключи
Значения |
Номер страницы |
0 |
|
со списком |
1 |
||
вторичного |
|||
адресов |
|||
ключа |
5 |
||
|
|||
|
|
||
100 |
1 |
|
|
150 |
3 |
8 |
|
|
|
||
|
|
9 |
|
|
|
2 |
Значения вторичных ключей |
7 |
|
6 |
||
могут быть изменены, |
||
3 |
||
поэтому перестройка индекса |
||
|
||
требуется не только при |
|
|
INSERT и DELETE, но и при |
4 |
|
UPDATE |
||
10 |
||
|
||
|
11 |
Ключ Неключевые атрибуты
100
100
100
150
150
100
150
150
100
100
150 150
Индексы в Transact-SQL
Виды индексов:
Кластерный (неплотный индекс). Один на таблицу. Для первичного ключа автоматически создается кластерный индекс, если не указан тип NONCLUSTERED.
Некластерный (плотный индекс). До 249 для таблицы. Если в таблице не существует кластерный индекс, то ссылки указывают на записи в основной области. Если в таблице имеется кластерный индекс, то все некластерные индексы ссылаются на записи кластерного индекса. Это позволяет избежать перестройку некластерных индексов при упорядочении записей (как это требует кластерный индекс). Если допускаются неуникальные значения ключей, то сервер БД добавляет к ним дополнительные значения, делая их уникальными.
Уникальность:
Уникальный индекс (кластерный или некластерный) гарантирует уникальность значений в индексируемом столбце. Вставка дубликатов будет отклоняться. Вместо требования уникальности индекса можно использовать ограничения PRIMARY KEY или UNIQUE.
Не уникальный индекс. Не гарантирует уникальность значений.
Длинные (символьные и составные) ключи снижают производительность и требуют затрат памяти (значения ключей дублируются в индексе) Индексирование увеличивает время вставки, поэтому индексирование должно быть оправданным. Для часто изменяемых столбцов следует использовать некластерные индексы.