тенденций продаж.
Кандидатом на роль 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