Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
10.05.2014
Размер:
156.58 Кб
Скачать

Внутренние структуры хранения

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

Петров

 

 

 

 

Соседние файлы в папке Презентации БД (ВФ)