Если вы уже знаете, как создавать в Oracle обычные индексы, синтаксис предложений для создания bitmap-индексов будет для вас понятен:
CREATE BITMAP INDEX persons_hair_color ON persons(hair_color); CREATE BITMAP INDEX persons_eye_color ON persons(eyer_color);
Теперь, чтобы найти в нашей таблице всех голубоглазых блондинов, мы передадим в Oracle следующий запрос:
SELECT first_name , last_name , gender FROM persons
WHERE hair_color = 'BLONDE' AND eye_color  = 'BLUE1;
Для поиска удовлетворяющих нас строк Oracle должна просто обратиться к двум соответствующим битовым картам и выполнить над ними операцию AND. Например:
000000000101000010000010000
AND 000 10001 00000 1000000QQOOOOQ
000000010000000000000000000
В результате мы быстро обнаруживаем, что заданным характеристикам соответствует только восьмая строка таблицы. В зависимости от того, для каких запросов будет использоваться эта таблица, нам, быть может, понадобится ввести и другие bitmap-индексы по таким признакам, как пол, возрастная группа, любимый музыкальный жанр и т.д.
Вот уже много лет Oracle выполняет "слияние" индексов, имеющих структуру В*-дерева. Это означает, что поиск по равенству в двух столбцах приводит к поиску соответствующего ключа в каждом индексе и слиянию полученных списков ROWID. Однако с момента появления Oracle6 производительность данного механизма стала, мягко говоря, разочаровывать. Bitmap-индексы предоставляют более быстродействующий механизм, который, к тому же, легче для понимания. Кроме того, обработка bitmap-индексов может быть распараллелена, если они секционируются не по собственному ключу.
Мы рекомендуем использовать bitmap-индексы главным образом в тех случаях, когда есть наборы атрибутов, по которым можно индексировать таблицу (как, например, в приведенной выше таблице служащих). В идеальном варианте эти атрибуты не должны быть особенно избирательны (т.е. не должны иметь большого числа отдельных значений). Предположим, вы знаете, что ожидается много запросов, в которых будет задано равенство по нескольким из таких атрибутов, но при этом все возможные комбинации ключевых столбцов имеют одинаковую вероятность появления. Мы не можем решить эту проблему при помощи традиционных индексов с состав-
4.  "Большие" особенности Oracle8	81