Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

WHERE PRODUCT ='software';

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

SELECT * FROM PROJECT

WHERE PROJ_NAME STARTING WITH 'Firebird 1';

Просмотр индексов

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

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

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

*

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

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

Изменение индекса

Активация/деактивация

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

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

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

Синтаксис:

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

<

54

В Firebird и InterBase индексы не могут быть "разбалансированы".
– Прим. науч. ред.

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

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

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

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

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

Изменение структуры индекса

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

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

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

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

Синтаксис:

DROP INDEX ИМЯ;

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

DROP INDEX MINSALX;

Ограничения

Никакой пользователь не может удалить индекс,

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

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

Тема оптимизации: оптимальное индексирование

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

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

Этот раздел содержит некоторые указания по поддержанию ваших индексов в рабочем состоянии в полном объеме.

Действия по обслуживанию индексов

Индексы являются двоичными структурами, которые могут стать разбалансированными после многих изменений базы данных, особенно если вы пренебрегаете общим обслуживанием базы данных. Индексы могут быть сделаны сбалансированными [55] множеством способов восстановления оптимального уровня производительности.

55

На самом деле индексы в Firebird и Interbase никогда не бывают "разбалансированными", т. е. глубина индекса всегда постоянна для всех листовых страниц. Соответственно, перестраивать индекс имеет смысл, когда он поврежден и когда требуется высокая скорость массовых вставок, удалений или обновлений. В реальных и больших базах данных плотность заполнения страниц индекса не опускается ниже 85%, независимо от числа дубликатов ключей.
– Прим. науч. ред.

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

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

* Восстановление базы данных из резервной копии gbak также пересоздает индекс в первоначальном состоянии.

Улучшение селективности индекса

Вообще говоря, селективность (избирательность) индекса - это оценочное количество строк, которые могут быть выбраны при поиске по каждому значению индекса. Уникальный индекс имеет максимально возможную селективность, потому что он не может выбрать более одной строки для каждого значения, в то время как индекс для столбца BOOLEAN имеет практически самую низкую селективность.

Индексирование столбца, который будет хранить преимущественно одно значение (например, страна рождения в предыдущем примере), будет худшим решением, чем не индексирование такого столбца совсем. Firebird достаточно эффективен при создании образа для неиндексированных сортировок и поисков.

Поделиться:
Популярные книги

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

Никто и звать никак

Ром Полина
Фантастика:
фэнтези
7.18
рейтинг книги
Никто и звать никак

Возвышение Меркурия. Книга 14

Кронос Александр
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 14

Идеальный мир для Лекаря 20

Сапфир Олег
20. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 20

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10