Выбрать главу

тенденций продаж.

Кандидатом на роль bitmap-индекса является столбец, который упоминается

во многих запросах, но содержит небольшой диапазон значений,

например:

■ N, S, Е, W

■ 1,2, 3,4, 5, 6

■ “Order placed” , “Order shipped”

Индекс содержит указатель на строку в таблице, которая содержит данное

ключевое значение индекса; ключевое значение используется для получения

rowid строки в.таблице. (Как обсуждалось в Главе 2, rowid используется

внутри базы данных для хранения физического расположения строки.)

В индексе B-tree список значений rowid хранится для каждого ключа,

соответствующего строкам с этим значением ключа. В B-tree индексе база

данных хранит список значений ключа с каждым rowid, что позволяет базе

данных найти конкретную строку в таблице.

В bitmap-индексе, однако, для каждого значения ключа используется

битовая карта; она позволяет базе данных найти строку. Каждый бит в битовой

карте соответствует возможному rowid. Если бит установлен, то это

означает, что строка с соответствующим rowid содержит значение ключа.

Отображающая функция преобразует позицию бита в соответствующий

rowid.

Bitmap-индексы обычно используют в таблицах, содержащих большие

объёмы данных, содержимое которых меняется редко. Также bitmap-индекс

следует создавать только для столбцов, которые содержат небольшое

число различных значений. Если количество различных значений столбца

меньше 1 процента от количества строк в таблице, или если значения

столбца повторяются более 100 раз, то этот столбец будет кандидатом на

bitmap-индекс. Например, если у вас есть таблица с миллионом строк, то

столбец с 10 ООО или менее различными значениями будет хорошим кандидатом

для bitmap-индекса; кроме того, обновления строк в таблице должны

быть редкими и столбец должен быть часто используемым в запросах

WHERE.

Следующее выражение создаёт bitmap-индекс для столбца status таблицы

order_status:

П CREATE BITMAP INDEX i_order_status ON order_status(status);

Примечание Разумеется, это не пример из реальной жизни, поскольку таблица order_

status не содержит достаточное число строк.

Создание таблиц, последовательностей, индексов и представлений 339

Дополнительную информацию о bitmap-индексах можно найти в книгах

«Oracle Database Performance Tuning Guide» u «Oracle Database Concepts»,

опубликованных корпорацией Oracle. Эти книги также содержат информацию

о других экзотических типах индексов, которые вы можете использовать.

На этом мы завершим обзор индексов. В следующем разделе вы узнаете

больше о представлениях.

Представления

Представлением называют предварительно заданный запрос к одной или

нескольким таблицам (известным под названием базовых таблиц). Выборка

информации из представления делается точно так же, как из обычных

таблиц: имя представления просто включается во фразу FROM оператора

SELECT. Для некоторых представлений можно также выполнять операторы

DML над базовыми таблицами.

Примечание В представлениях не хранятся строки. Строки всегда хранятся в таблицах.

Вы уже встречали несколько примеров выборки информации из представлений,

когда выбирали строки из словаря данных, доступ к которому

осуществляется через представления. Например, u s e r _ t a b l e s , u s e r _

se q u e n c e s и u s e r _ in d e x e s являются представлениями.

Представления предлагают следующие дополнительные преимущества.

■ Позволяют записывать сложные запросы как представления; таким

образом можно скрывать от конечного пользователя сложность составления

запросов.

■ Позволяют пользователю выполнять только выборку информации

из представления. Это позволяет скрыть от конечного пользователя

базовые таблицы, на которых построено представление.

■ Позволяют видеть только определенные строки базовых таблиц, что

дает вам возможность реализовать еще один уровень защиты и позволяет

скрывать некоторые строки от конечных пользователей.

В этом разделе вы узнаете, как:

■ Создать и использовать представление.

■ Получить сведения о представлении из словаря данных.

■ Изменить представление.

■ Удалить представление.

Создание и использование представлений

Для создания представления используется оператор CREATE VIEW, имеющий

следующий упрощенный синтаксис:

□ CREATE [OR REPLACE] VIEW [{FORCE | NOFORCE}] VIEW имя_предст

[ (имя _псе в донима [ , имя_псевдонима . . . ] ) ] AS подзапрос

[WITH {CHECK OPTION | READ ONLY } CONSTRAINT имя_огр] ;

340 Глава 10