Индексы основанные на функциях
В Oracle 11 также допускается создание так называемых Основанных на функциях индексов, в которых вместо столбцов указывается выражение, содержащее столбцы и функции. К примеру, если известно, что в Bitmap-индексы Ключевое слово BITMAP указывает на то, что индекс должен создаваться с двоичной картой для каждого уникального ключа, а не индексировать каждую строку. Компания Oracle рекомендует создавать подобные индексы для столбцов с небольшим количеством возможных значений. К примеру отличными кандидатами на такую индексацию выступают поля пола и семейного положения в таблице сотрудников. В базе данных ACME кандидатом на Bitmap-индексацию является поле состояния заказа, так как для него определено всего четыре значения: COMPLETE, INVOICED, SHIPPED и CANCELLED. В следующем примере создается Bitmap-индекс
Как уже отмечалось, для таблиц и индексов базы данных можно определить отдельные пространства таблиц (и это имеет смысл с точки зрения производительности базы данных). Синтаксис этого предложения такой же, как и в инструкции CREATE TABLE (в следующем примере предполагается существование пространства таблиц Следующая инструкция создает уникальный индекс IDX_CUST_NAME_ALS по столбцам CUST_NAME_S и CUST_ALIAS_S таблицы CUSTOMER с сортировкой значений, принятой по умолчанию (по возрастанию).
CREATE UNIQUE INDEX idx_cust_name_als ON customer(cust_name_s, cust_alias_s)
Синтаксис DB2 и Microsoft SQL Server позволяет использовать предложение INCLUDE для определения дополнительных столбцов в индексе. Эти дополнительные столбцы не участвуют в поиске; другими словами, не предполагается, что они будут содержаться в предложении WHERE. В то же время эти поля часто участвуют в разделе SELECT, и их извлечение непосредственно из индекса займет меньше времени, чем из таблицы. Для примера предположим, что известно, что пользователи, выполняющие запросы отбора к таблице заказчиков, часто извлекают имя клиента, его статус и кредитную надежность, при этом в предложении WHERE обычно участвуют имя и псевдоним заказчика. Следующий индекс может повысить производительность подобных запросов.
Весь трюк состоит в том, что как только в индексе отыскивается нужный клиент, информация о его статусе и кредитной надежности уже хранится в листовых узлах индекса. Таким образом, не требуется дополнительной операции чтения для извлечения данных.