
Презентации БД (ВФ) / DB_lec12
.pdfВнутренние структуры хранения
BITMAP индексы. Операция обновления
Операция обновления выполняется через удаление и последующую вставку:
•Удаляется старое значение из части битовой карты
•Добавляется новое значение части битовой карты
Как минимум 2 части битовой карты вовлечены в процесс каждого обновления
Когда bitmap индексы обновляются:
•Должно быть достаточно места в блоке для старых и новых значений
•В противном случае блок делится
•Что приводит к длинным рядам промежуточных блоков
Внутренние структуры хранения
BITMAP индексы. Блокировка
Когда bitmap индекс обновляется, устанавливается блокировка на запись листового блока
Обновляемая запись в листовом блоке может
содержать битовую карту, которая охватывает
несколько строк в других блоках
Ни одна другая транзакция не может обновлять строку, вовлеченную в процесс обновления другой строкой до завершения транзакции

Внутренние структуры хранения
BITMAP индексы. Операция обновления
Bitmap Index строки |
|
|
CREATE BITMAP INDEX i1 ON t1 (c2); |
|
|||||||
|
|
|
|
|
|
|
|
|
|||
листовых блоков |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
Lock 0 |
|
Lock |
01 |
|
|
Lock |
0 |
|
Lock |
01 |
|
2 Key |
2 |
|
Key |
3 |
|
|
Key |
3 |
|
Key |
4 |
Start |
211/0 |
|
Start |
211/0 |
|
Start |
213/0 |
|
Start |
211/0 |
|
End |
214/3 |
|
End |
212/3 |
|
End |
214/3 |
|
End |
214/3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
c1 |
77 |
78 |
80 |
83 |
|
86 |
88 |
|
89 |
90 |
|
92 |
94 |
97 |
98 |
|
99 |
100 |
|
104 |
107 |
c2 |
3 |
3 |
4 |
2 |
|
3 |
43 |
|
4 |
2 |
|
4 |
2 |
3 |
3 |
|
3 |
3 |
|
4 |
2 |
c3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
5 |
10 |
5 |
|
|
20 |
|
|
|
|
|
|
|
|
|
15 |
20 |
|
5 |
10 |
|
|
10 |
|
15 |
5 |
|
25 |
10 |
15 |
20 |
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Block 211 |
|
|
|
Block 212 |
|
|
|
Block 213 |
|
|
|
Block 214 |
|
|
Table Rows |
UPDATE t1 |
|
SET c2 = 4 |
|
WHERE c1 = 88; |
Updated
Locked
Внутренние структуры хранения
BITMAP индексы. Деление листовых блоков
Когда bitmap индекс обновляется:
•Удаляемая строка остается до завершения транзакции
•Новая строка записывается в свободное пространство листового блока
•Если нет свободного места в текущем блоке, используется новый блок
•Элементы в листовых блоках упорядочены
•Если обновляется последняя битовая карта в блоке, блок делится
•Промежуточные блоки указывают на начало дочерних или листовых блоков
•Если изменения касаются конца битовой карты, битовая карта может быть скопирована в промежуточный блок

Внутренние структуры хранения
BITMAP индексы. Деление листовых блоков
Пример деления листовых блоков
8 уникальных значений – разделены на 3000 строк
1 3 5 7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
|
3 |
4 |
|
|
5 |
6 |
|
7 |
8 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START |
START |
|
|
START |
START |
|
|
|
|
START |
START |
|
|
|
START |
START |
END |
END |
|
|
END |
END |
|
|
|
|
END |
END |
|
|
|
END |
END |
100000 |
010000 |
|
001000 |
000010 |
|
|
100000 |
010000 |
|
001000 |
000100 |
|||||
010000 |
001000 |
|
000100 |
000001 |
|
|
010000 |
001000 |
|
000100 |
000010 |
|||||
001000 |
000100 |
|
000010 |
100000 |
|
|
001000 |
000100 |
|
000010 |
000001 |
|||||
000100 |
000010 |
|
000001 |
010000 |
|
|
000100 |
000010 |
|
000001 |
100000 |
|||||
000010 |
000001 |
|
100000 |
001000 |
|
|
000010 |
000001 |
|
100000 |
010000 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Branch
Block
Leaf
Blocks

Внутренние структуры хранения
BITMAP индексы. Деление листовых блоков
UPDATE t1 |
|
Updated |
SET c2 = 2 /* было 4 */ |
|
Deleted |
WHERE c1 = 23988; |
|
|
|
|
1 |
2 |
3 |
4 |
5 |
7 |
|
START |
|
START |
|
Branch |
|
END |
|
END |
|
Block |
|
100000 |
|
010000 |
|
|
|
010000 |
|
001000 |
|
|
|
001000 |
|
000100 |
|
|
|
000100 |
|
000010 |
|
|
|
000010 |
|
000001 |
|
|
1 |
2 |
|
2 |
|
3 |
4 |
4 |
|
5 |
6 |
|
7 |
8 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START |
START |
|
START |
|
|
|
START |
START |
|
|
|
START |
|
|
START |
START |
|
|
START |
START |
END |
END |
|
END |
|
|
|
END |
END |
|
|
|
END |
|
|
END |
END |
|
|
END |
END |
100000 |
010000 |
|
100000 |
|
001000 |
000010 |
100000 |
|
100000 |
010000 |
|
001000 |
000100 |
|||||||
010000 |
001000 |
|
010000 |
|
000100 |
000001 |
010000 |
|
010000 |
001000 |
|
000100 |
000010 |
|||||||
001000 |
000100 |
|
001000 |
|
000010 |
100000 |
001000 |
|
001000 |
000100 |
|
000010 |
000001 |
|||||||
000100 |
000010 |
|
000100 |
|
000001 |
010000 |
000100 |
|
000100 |
000010 |
|
000001 |
100000 |
|||||||
000010 |
000001 |
|
000010 |
|
100000 |
001000 |
000010 |
|
000010 |
000001 |
|
100000 |
010000 |
Leaf
Blocks

Внутренние структуры хранения
BITMAP индексы. Деление листовых блоков
UPDATE t1 |
1 |
5 |
SET c2 = 6 /* было 8 */
WHERE c1 = 23992;
Updated
Deleted
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
START |
START |
START |
START |
|
END |
|
|
|
END |
|
|
|
END |
|
|
|
END |
|
||
|
100000 |
|
|
|
010000 |
|
|
100000 |
|
|
|
010000 |
|
|||
|
010000 |
|
|
|
001000 |
|
|
010000 |
|
|
|
001000 |
|
|||
|
001000 |
|
|
|
000100 |
|
|
001000 |
|
|
|
000100 |
|
|||
|
000100 |
|
|
|
0000100 |
|
|
000100 |
|
|
|
0000100 |
|
|||
|
000010 |
|
|
|
00001 |
|
|
000010 |
|
|
|
00001 |
|
1 |
2 |
|
2 |
|
3 |
4 |
4 |
|
5 |
6 |
|
6 |
|
7 |
8 |
8 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START |
START |
START |
|
START |
START |
|
START |
START |
START |
START |
|
START |
START |
|
START |
|||||||||||||
END |
END |
|
END |
|
|
|
END |
END |
|
|
|
END |
|
|
END |
END |
|
|
END |
|
|
|
END |
END |
|
|
|
END |
100000 |
010000 |
|
100000 |
|
001000 |
0000100 |
100000 |
|
100000 |
010000 |
|
100000 |
|
001000 |
000100 |
000010 |
||||||||||||
010000 |
001000 |
|
010000 |
|
000100 |
00001 |
010000 |
|
010000 |
001000 |
|
010000 |
|
000100 |
0000100 |
0000011 |
||||||||||||
001000 |
000100 |
|
001000 |
|
0000100 |
100000 |
001000 |
|
001000 |
000100 |
|
001000 |
|
0000100 |
00001 |
00000 |
||||||||||||
000100 |
0000100 |
|
000100 |
|
00001 |
010000 |
000100 |
|
000100 |
0000100 |
|
000100 |
|
00001 |
100000 |
010000 |
||||||||||||
000010 |
00001 |
|
000010 |
|
100000 |
001000 |
000010 |
|
000010 |
00001 |
|
000010 |
|
100000 |
010000 |
001000 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Внутренние структуры хранения
BITMAP индексы. Выводы
•Индекс на основе битовых карт создается достаточно быстро и занимает мало места
•Размер и BITMAP индекса существенно зависит от распределения данных
•Стоимостной оптимизатор обычно выбирает Bitmap индекс, если для выполнения запроса можно использовать несколько таких индексов
•Операции вставки и удаления столбцов, входящих в состав Bitmap индексов, могут вызывать существенные конфликты и блокировки

Внутренние структуры хранения
Оптимизатор запросов. Методы доступа к данным
Оптимизатор запросов или оптимизатор – встроенное в СУБД программное обеспечение, которое определяет наиболее эффективный способ выполнения SQL-выражения
План выполнения запроса(Query Execution Plan) –
последовательность шагов или инструкций СУБД, необходимых для выполнения SQL-выражения
Методы доступа к данным
Полное табличное сканирование |
Доступ по индексу |
Полное просмотр таблицы выполняется при следующих условиях:
•Небольшой размер таблицы
•Выбор большого объема данных
•Высокая степень параллелизма, определённого для доступа к таблице

Внутренние структуры хранения
Методы доступа к данным. Основные операции
Index Unique Scan
Метод для поиска одного ключа с помощью уникального индекса. Всегда возвращает одно значение
select empno,ename
from emp where empno=10;
Query Plan |
1 |
|
|
------------------------------------ |
|
|
|
|
|
|
|
3. SELECT STATEMENT [CHOOSE] Cost=1 |
|
|
|
2. TABLE ACCESS BY ROWID EMP |
2 |
|
|
1. INDEX UNIQUE SCAN EMP_I1 |
|
|
|
|
|
|
|
|
|
|
|
|
rowid |
Empno |
Ename |
|
|
|
|
|
AAAAECAABAAAAgiAAA |
9 |
Иванов |
|
|
|
|
|
AAAAECAABAAAAgiTNW |
10 |
Петров |
|
|
|
|