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

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

Жанры

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

Борри Хелен

Шрифт:

Сравнения

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

Что индексировать

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

Основные

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

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

* условие поиска часто ссылается на столбец (Индекс поможет в поиске дат и чисел, когда ожидается прямое сравнение или вычисление BETWEEN. Поисковые индексы для строковых столбцов полезны, когда строки проверяются на точное соответствие или в предикатах STARTING WITH и CONTAINING. Они не годятся для предиката LIKE [52] .);

* столбец не включен в ограничение целостности, но на него часто ссылается условие в JOIN;

* предложение ORDER BY часто использует столбец для сортировки данных (Когда набор данных должен быть упорядочен по нескольким столбцам, составной индекс, соответствующий порядку, указанному в предложении ORDER BY, может увеличить скорость поиска [53] .);

52

В случаях, когда условие поиска задает LIKE ' string% ', оптимизатор обычно преобразовывает его к предикату STARTING WITH 1 string1 и использует индекс, если он доступен.

53

Составные индексы не являются столь важными в Firebird, как в большинстве других СУБД. Часто их использование является неоправданным, потому что Firebird интеллектуально использует индексы из одного столбца.

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

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

Вы не должны использовать индексы для столбцов, которые:

* редко используются в условиях поиска;

* являются часто изменяемыми неключевыми значениями, такими как значение времени или идентификация пользователя;

* имеют небольшое количество возможных или фактических значений в большом количестве строк;

* представляют собой двухзначное или трехзначное логическое значение.

Когда индексировать

Некоторые индексы сами заявят о себе в начальном периоде проектирования - обычно через известные вам требования сортировки, группировки, вычислений. Очень хорошей практикой является консервативный подход к созданию индексов: не создавать их, пока не станет ясным их польза. Является хорошей практикой отложить создание сомнительных индексов до того момента в разработке, когда у вас появится хороший набор тестовых данных и сведения

о том, какие операции слишком медленные.

Преимущества отложенного проектирования индексов:

* уменьшение "завуалированное(tm) производительности", на которую может накладываться тестирование функциональной полноты;

* более быстрая идентификация реальных источников узких мест;

* исключение ненужного или неэффективного индексирования.

Использование CREATE INDEX

Оператор CREATE INDEX создает индекс из одного или более столбцов таблицы. Индекс из одного столбца отыскивает только один столбец в ответ на запрос, в то время как индекс из нескольких столбцов отыскивает один или более столбцов.

Синтаксис:

CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]

INDEX имя-индекса ON имя-таблицы (столбец [, столбец ...]);

Обязательные элементы

Обязательные элементы в синтаксисе CREATE INDEX следующие:

* CREATE INDEX имя-индекса - именует индекс. Идентификатор должен отличаться от идентификаторов всех других объектов базы данных за исключением идентификаторов ограничений и столбцов. Хорошая идея использовать систему имен объектов схемы, это также поможет лучшей документированности;

! ! !

ПРИМЕЧАНИЕ. Начиная с версии 1.5 и выше работает автоматическое именование индекса по имени его ограничения.

. ! .

* имя-таблицы- имя той таблицы, для которой создается индекс;

столбец [, столбец ...] - имя столбца или разделенный запятыми список имен столбцов, которые будут ключами индекса. Порядок столбцов значим для индексов. Более подробную информацию см. в разд. "Индексы из нескольких столбцов".

Пример

Следующее объявление создает неуникальный возрастающий индекс для столбца LAST_NAME (фамилия человека) в таблице PERSON. Он может быть полезным в условиях поиска типа WHERE LAST_NAME = 'Johnston' или WHERE LAST_NAME STARTING WITH 'Johns':

CREATE INDEX LAST_NAME_X ON PERSON(LAST_NAME);

Необязательные элементы

UNIQUE

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

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

Пример

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

CREATE UNIQUE INDEX STK_SIZE_COLOR_UQX

ON STOCK_ITEM (PRODUCT_ID, SIZE, COLOR);

Заметьте, что уникальный индекс не является ключом. Если вам требуется уникальный ключ для ссылочных целей, используйте для этого ограничение UNIQUE для столбца (столбцов). Подробнее об использовании ограничения UNIQUE см. главу 16.

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

Попаданка 3

Ахминеева Нина
3. Двойная звезда
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка 3

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Два лика Ирэн

Ром Полина
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Два лика Ирэн

Одержимый

Поселягин Владимир Геннадьевич
4. Красноармеец
Фантастика:
боевая фантастика
5.00
рейтинг книги
Одержимый

Испытание Огня

Гаврилова Анна Сергеевна
3. Академия Стихий
Фантастика:
фэнтези
9.43
рейтинг книги
Испытание Огня

Измена. Возвращение любви!

Леманн Анастасия
3. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Возвращение любви!

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Невеста клана

Шах Ольга
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Невеста клана

В семье не без подвоха

Жукова Юлия Борисовна
3. Замуж с осложнениями
Фантастика:
социально-философская фантастика
космическая фантастика
юмористическое фэнтези
9.36
рейтинг книги
В семье не без подвоха

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

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

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя