Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Если вы ожидаете для таблицы частого выполнения запросов, которые используют оператор OR, то лучше создать индексы из одного столбца для каждого условия. Поскольку индексы из нескольких столбцов упорядочены иерархически, запрос, который использует одно из двух или более условий, должен просматривать всю таблицу, теряя преимущества использования индексов.

Предположим, требуется поиск:

. . .

WHERE А > 10000 OR В < 300 OR С BETWEEN 40 AND 80

. . .

Индекс для (А, В, С) будет использован для поиска строк, содержащих подходящие значения А, но он не может быть использован для поиска значений в или с. Для А убывающий индекс будет более полезным, чем возрастающий, если отыскиваемое значение находится в верхней части диапазона хранимых значений.

<p>Критерии поиска</p></span><span>

Те же самые правила, которые применяются к предложению ORDER BY, также применимы к запросам, содержащим предложение WHERE. Следующий пример создает индекс по нескольким столбцам для таблицы PROJECT В базе данных employee.gdb:

CREATE UNIQUE INDEX PRODTYPEX ON PROJECT (PRODUCT, PROJ_NAME);

Оптимизатор для этого запроса выберет индекс PRODTYPEX, потому что предложение WHERE ссылается на первый сегмент этого индекса:

SELECT * FROM PROJECT

WHERE PRODUCT ='software';

Напротив, он проигнорирует данный индекс для следующего запроса, потому что PROJ_NAME не является первым сегментом:

SELECT * FROM PROJECT

WHERE PROJ_NAME STARTING WITH 'Firebird 1';

<p>Просмотр индексов</p></span><span>

Для просмотра всех индексов, определенных в текущей базе данных, используйте в isql команду SHOW INDEX:

* чтобы просмотреть все индексы, определенные для конкретной таблицы, используйте команду:

SHOW INDEX имя-таблицы;

* для просмотра информации конкретного индекса используйте:

SHOW INDEX имя-индекса;

<p>Изменение индекса</p></span><span><p>Активация/деактивация</p></span><span>

Оператор ALTER INDEX используется для переключения состояния индекса из активного в неактивное и наоборот. Он может быть применен для отключения индекса перед добавлением или изменением большого пакета строк и устранения при этом дополнительных затрат для поддержки индексов в процессе длительной операции. После этой операции индексирование может быть восстановлено, и индексы будут пересозданы.

Другое использование этого оператора - служебные действия. В нормальных условиях распределение значений меняется постепенно, а при некоторых рабочих условиях - более часто.

Структуры двоичных деревьев, в которых хранятся индексы, могут стать разбалансированными. Переключение индекса из активного в неактивное состояние и обратно пересоздает и балансирует[54] индекс.

Синтаксис:

ALTER INDEX имя-индекса INACTIVE | ACTIVE ;

Ошибка "индекс находится в использовании"

Индекс, используемый в транзакции, не может быть изменен или удален, пока не завершится использующая его транзакция. Такие попытки будут иметь различные результаты в зависимости от установок блокировки активной транзакции:

* в транзакции WAIT оператор ALTER INDEX ожидает, пока не завершится транзакция;

* с транзакции NOWAIT Firebird возвращает ошибку.

Информацию об установках блокировок транзакций см. в разд. "Разрешение блокировок" главы 26.

<p>Изменение структуры индекса</p></span><span>

В отличие от большинства операторов ALTER синтаксис ALTER INDEX не может быть использован для изменения структуры данного объекта. Для этого необходимо удалить индекс и заново его создать с использованием оператора CREATE INDEX.

<p>Удаление индекса</p></span><span>

Оператор DROP INDEX удаляет созданный пользователем индекс из базы данных.

Используйте DROP INDEX также в случае необходимости изменения структуры индекса: добавление, удаление сегментов, изменение порядка сегментов или изменение порядка сортировки. Вначале используйте оператор DROP INDEX для удаления индекса, затем - оператор CREATE INDEX для создания индекса с тем же именем и новыми характеристиками.

Синтаксис:

DROP INDEX ИМЯ;

Следующий оператор удаляет индекс из таблицы JOB:

DROP INDEX MINSALX;

<p>Ограничения</p></span><span>

Никакой пользователь не может удалить индекс, кроме его создателя, пользователя SYSDBA или (в POSIX) пользователя с привилегиями root.

Определенные системой индексы, созданные автоматически для столбцов, определенных в ограничениях уникального, первичного или внешнего ключа, не могут быть удалены. Чтобы удалить такие индексы, необходимо удалить соответствующие ограничения.

<p>Тема оптимизации: оптимальное индексирование</p></span><span>

В отличие от многих других реляционных систем баз данных для Firebird не нужен администратор базы данных на полный рабочий день с арсеналом алгоритмов для поддержания нормального выполнения базы данных. Главным образом содержащиеся в порядке базы данных Firebird просто "сохраняются в прежнем состоянии".

Индексы - это значимая составная часть производительности базы данных. Важно понимать, что они являются динамическими структурами, которым, как и движущимся частям двигателя, нужны время от времени "чистка и смазка".

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT