Для того чтобы повысить скорость поиска и уменьшить время выполнения запросов, MySQL позволяет задавать индексы для определенных полей таблицы. Термин "индекс" здесь означает то же, что и в реальном мире. Аналогичный по назначению и концепции индекс вы найдете в конце данной книги - это не что иное, как предметный указатель. Индекс представляет собой упорядоченный перечень отсортированных значений полей, предназначенных для упрощения задачи поиска определенных полей при запросах.
При отсутствии индекса, MySQL необходимо просмотреть последовательно все записи таблицы для того, чтобы найти записи, соответствующие определенному запросу. На небольших таблицах это не слишком заметно, но по мере увеличения размера таблицы полный просмотр ее приводит к существенным задержкам при обработке запроса. Индекс существенно улучшает ситуацию: при наличии индекса, MySQL может вообще не производить полного просмотра таблицы, при этом достаточно просмотреть индекс и прямо перейти к определенным записям в таблице. При поиске записей, которые соответствуют определенным условиям поиска, чтение индекса обычно происходит быстрее просмотра всей таблицы, поскольку индексы по своим размерам значительно меньше размеров таблицы. Поэтому просмотр индекса производится быстрее (о том, как индексы влияют на производительность, можно подробнее узнать в главе 16, "Оптимизация производительности").
Нужно отметить, что использование индексов приводит и к определенным издержкам: для них требуется дополнительное дисковое пространство, и кроме того они влияют на скорость выполнения запросов INSERT, UPDATE и DELETE, т.к. при модификации записей в таблицах, добавлении в таблицы новых записей или удалении их из таблиц модификация должна производиться и в индексе. Но в большинстве случаев это не должно стать причиной для отказа от использования индексов: дисковое пространство дешевеет с каждым днем, а MySQL имеет множество методов оптимизации для уменьшения времени, необходимого для модификации индексов и просмотра их в целях поиска определенных значений (см. детали во врезке "Ударим хешем по производительности").
Ударим хешем по производительности
При работе с таблицами типа InnoDB, для уменьшения количества операций записи на диск, MySQL использует "разумную" буферизацию. Она заключается в создании протокола изменений в специальном буфере добавлений, с последующим обновлением всего индекса с учетом всех изменений, причем в одной операции записи (вместо многочисленных мгновенных операций записи). MySQL также пытается преобразовать индексы с использованием B-дерева (хранящегося на диске) в адаптивные хеши-рованные индексы (поиск по которым производится значительно быстрее), основанные на шаблонах выполняемых запросов.
Индексирование рекомендуется прежде всего для полей, которые используются в предложениях WHERE, ORDER BY и GROUP BY запросов SELECT, и в полях, которые используются для объединения таблиц.
Индексы создаются путем добавления модификатора INDEX к оператору CREATE TABLE.
Для полей типа BLOB и TEXT, возможно задать определенное количество индексируемых символов. Для этого нужно задать длину индекса в скобках после имени поля в операторе CREATE INDEX, что демонстрируется в следующем примере.
Такое частичное индексирование вполне возможно (хотя и не всегда) и для полей CHAR и VARCHAR.
На заметку
Если в операторе CREATE INDEX или CREATE TABLE имя индекса отсутствует, MySQL автоматически присваивает индексу имя индексируемого поля.
Если индекс вам больше не нужен, его можно удалить с помощью команды DROP INDEX:
DROP INDEX имя-индекса ON имя-таблицы;
Далее следует пример удаления индекса username, созданного в предыдущем примере.
Кроме индексов "обычного" типа, MySQL поддерживает еще два важных типа индексов: UNIQUE и FULLTEXT, речь о которых пойдет ниже.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Индексы
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Создание таблиц | Все о MySQL. Индекс unique |