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

примере создается составной индекс, которому присваивается

имя i_employees_first_last_name, по столбцам flrst_name и last_name таблицы

employees:

□ CREATE INDEX i_employees_first_last_name ON

employees(first_name, last_name);

Создание индексов на базе функций

В предыдущем разделе рассматривался индекс i_customers_last_name. Сделаем

следующий запрос:

□ SELECT first_name, last_name

FROM customers

WHERE last_name = UPPER(‘ BROWN’ );

Поскольку в запросе используется функция (в нашем случае это функция

UPPER), индекс i_customers_last_name не используется. Если понадобится

индекс, который будет основываться на результатах выполнения

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

функциональный индекс:

П CREATE INDEX i_customers_last_name_func

ON customers(UPPER(last_name));

336 Глава 10

Кроме того, ваш АБД должен установить в true параметр инициализации

QUERY_REWRITE_ENABLED (значение по умолчанию этого параметра равно

false), чтобы можно было воспользоваться преимуществами функциональных

индексов:

□ CONNECT system/manager

ALTER SYSTEM SET QUERY_REWRITE_ENABLED=TRUE;

Получение информации об индексах

Можно получить информацию о своих индексах, задав запрос к представлению

user_indexes. В таблице 10.7 перечислены некоторые столбцы user_

indexes.

Примечание Информацию о всех индексах можно получить, выполнив запрос к представлению

all_indexes.

В следующем примере выбираются столбцы index_name, table_name,

uniqueness и status из таблицы user_indexes для таблиц customers и

employees. В списке индексов оказывается индекс custome rs_pk, который

является уникальным индексом, автоматически создаваемым базой данных

Oracle для столбца первичного ключа customer_id таблицы customers:

□ CONNECT store/store_password

SELECT index_name, table_name, uniqueness, status

FROM user_indexes

WHERE table_name IN (‘CUSTOMERS', ‘EMPLOYEES’)

ORDER BY index_name;

INDEX_NAME TABLE_NAME UNIQUENES STATUS

CUST0MERS_PK CUSTOMERS UNIQUE VALID

EMPL0YEES_PK EMPLOYEES UNIQUE VALID

I CUSTOMERS_LAST_NAME CUSTOMERS NONUNIQUE VALID

I CUSTOMERS PHONE CUSTOMERS UNIQUE VALID

I EMPLOYEES FIRST LAST NAME EMPLOYEES NONUNIQUE VALID

I FUNC CUSTOMERS LAST NAME CUSTOMERS NONUNIQUE VALID

Получение информации об индексах для столбца

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

представлению user_ind_columns. В таблице 10.8 перечислены некоторые

столбцы user_ind_columns.

Таблица 10.7. Некоторые столбцы в userjndexes

Столбец Тип___________Описание____________________________________________

index_name VARCHAR2(30) Имя индекса.

table_owner VARCHAR2(30) Пользователь, владеющий таблицей.

table_name VARCHAR2(30) Имя таблицы, для которой построен индекс.

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

Таблица 10.7. Некоторые столбцы в userjndexes (окончание)

Столбец Тип Описание

VARCHAR2(9) Указывает, уникален ли индекс. Устанавливается на UNIQUE

ИЛИ N0NUNIQUE.

VARCHAR2(8 ) Указывает, является ли индекс действующим. Устанавлива-

__________________________ ется на v a l i d или in v a l id .________________________________

Таблица 10.8. Некоторые столбцы в представлении user_ind_columns

uniqueness

s ta tu s

Столбец Тип Описание

index_name VARCHAR2(30) Имя индекса,

tablejname VARCHAR2(30) Имя таблицы.

coluinn_name VARCHAR2(30) Имя столбца, по которому построен индекс.

Примечание Информацию о всех индексах, к которым вам разрешен доступ, можно получить,

задав запрос к представлению all_ind_columns.

В следующем примере из user_ind_columns выбираются столбцы index_

name, table_name и column_name для таблиц customers и employees:

COLUMN table_name FORMAT a15

COLUMN column_name FORMAT a15

SELECT index_name, table_name, column_name

FROM user_ind_columns

WHERE table_name IN (‘CUSTOMERS’, 'EMPLOYEES’)

ORDER BY index_name;

INDEX NAME TABLE NAME

CUST0MER_PK CUSTOMERS

EMPL0YEES_PK EMPLOYEES

I_CUSTOMER_LAST_NAME CUSTOMERS

I_CUST0MER_PH0NE CUSTOMERS

I_EMPLOYEES_FIRST_LAST_NAME EMPLOYEES

I_EMPLOYEES_FIRST_LAST_NAME EMPLOYEES

I_FUNC_CUSTOMERS_LAST NAME CUSTOMERS

C0LUMN_NAME

CUST0MER_ID

EMPL0YEE_ID

LAST_NAME

PHONE

LAST_NAME

FIRST_NAME

SYS_NC00006$

Модификация индекса

Для модификации индекса используется оператор ALTER INDEX. Следующий

пример переименовывает индекс i_customers_phone в i_customers_phone_

number:

□ ALTER INDEX i_customers_phone RENAME TO i_customers_phone_number;

Удаление индекса

Удалить индекс можно, используя оператор DROP INDEX. В следующем примере

удаляется индекс i_customers_phone_number:

□ DROP INDEX i_customers_phone_number;

338 Глава 10

Создание bitmap-индекса

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

собой базы данных, содержащие очень большие объёмы информации.

Данные из хранилища обычно читают с помощью большого количества

запросов, но при этом не изменяют с помощью большого количества

одновременных транзакций. Хранилища данных обычно используют в

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