При выполнении запроса InterBase определяет список индексов, связанных с данной таблицей. Затем устанавливает, что является более эффективным, просмотреть всю таблицу или для обработки запросов использует существующий индекс. Если InterBase решает использовать индекс, то поиск ведется сначала по ключевым значениям в индексе, а затем по указателям переходит к необходимой строке.
Использование индекса обычно требует меньшего количества обращений к диску, чем последовательное чтение строк таблиц. Индекс может быть определен как на отдельном столбце, так и на группе столбцов таблиц. Однако индексирование оправдано не всегда. При всяком обновлении данных должны быть обновлены и индексы, поэтому увеличиваются временные затраты на обновление данных. Кроме того, после значительного числа обновлений индексы становятся несбалансированными, вследствие чего время поиска по ним возрастает. В связи с этим при проектировании базы данных необходимо находить компромисс между требованиями по ускорению поиска данных и требованиями скорости обновления данных.
Использование индексов для небольших по объему таблиц ваааще не оправдано. Если имеется индекс по группе полей, то поиск по первому полю из группы может прямо использовать этот индекс и нет смысла по нему делать отдельный индекс. Если поиск по каким-либо полям редок, то построение по ним индексов не оправдано.
Команды создания индексов:
CREATE [UNIQUE] [ASC|DESC] INDEX <имя_индекса> ON <имя_таблицы> (список полей);
InterBase автоматически генерирует индексы системного уровня по столбцам или набору столбцов, когда таблицы определяются с конструкцией ограничения PRIMARY KEY, FOREIGN KEY, UNIQUE.
Пример:
CREATE UNIQUE ASC INDEX id ON Student (student_id);
Команда изменения индекса:
ALTER INDEX <имя_индекса> {ACTIVE|INACTIVE};
Восстановление индекса:
SET STATISTICS INDEX <имя_индекса>;
Удаление индекса:
DROP INDEX <имя_индекса>;
Исключения – поименованное сообщение об ошибке. Оно может быть инициировано хранимой процедурой или триггером. Инициировано может быть только предварительно созданное исключение. Один раз объявленное исключение может быть использовано во многих процедурах и триггерах.