MySQL. Урок 14. Индексы.

Индекс — это структура данных, упрощающая поиск в таблице. Представьте, что нам нужно найти книгу по названию. В таблице могут быть миллионы записей и чтобы найти нужную в среднем мы просмотрим примерно половину. Как ускорить процесс поиска? Для этого то и существуют индексы. Индексы создаются по каждому полю отдельно. Например, нам нужен индекс по полю title. Индекс сортирует все значения по заданному столбцу (например, по алфавиту) и имеет ссылки на строки таблицы, откуда это значение было получено. Часто индексы реализуется на базе деревьев, в частности B-tree. Представьте насколько можно ускорить поиск по отсортированным значениям. Вспомните хотя бы алгоритм двоичного поиска.

При создании первичного ключа и использовании выражения PRIMARY KEY индекс по этому полю создается автоматически. Также как и при создании внешних ключей при использовании выражения FOREIGN KEY.

Но по мере развития системы, когда приходит понимание того, что выборка данных часто осуществляется по тем или иным условиям, появляется потребность в ускорении времени выборки по определенным полям.

Создание индекса.

Наши клиенты хотят быстро находить нужные книги по названию, получая моментальный ответ. Почему бы не создать для этого поля индекс? Для этого применим команду CREATE INDEX <имя индекса> ON <таблица>(<столбец>).

Для анализа использования индексов используется команда EXPLAIN. После нее нужно записать любой запрос, где используется то поле, по которому создан индекс:

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

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

Добавить индекс в уже существующую таблицу можно также следующим образом:

Данные способы создания индексов почти идентичны.

Недостатки.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *