10.3.5 Индексы столбцов
Наиболее распространённый тип индекса включает один столбец, хранящий копии значений из этого столбца в структуре данных, что позволяет быстро находить строки с соответствующими значениями столбца. Структура данных B-дерева позволяет индексу быстро находить определённое значение, набор значений или диапазон значений, соответствующих операторам, таким как =, >, ≤, BETWEEN, IN и так далее, в условии WHERE.
Максимальное количество индексов на таблицу и максимальная длина индекса определяются для каждого движка хранения. См. Главу 17, Движок хранения InnoDB и Главу 18, Альтернативные движки хранения. Все движки хранения поддерживают как минимум 16 индексов на таблицу и общую длину индекса как минимум 256 байт. Большинство движков хранения имеют более высокие ограничения.
Дополнительную информацию об индексах столбцов см. в Разделе 15.1.15, «Оператор CREATE INDEX».
Префиксы индексов
С помощью синтаксиса в спецификации индекса для строкового столбца можно создать индекс, использующий только первые col_name(N)N символов столбца. Индексирование только префикса значений столбца таким образом может значительно уменьшить размер файла индекса. При индексировании столбца типа BLOB или TEXT необходимо указать длину префикса для индекса. Например:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
Длина префиксов может достигать 767 байт для таблиц InnoDB, использующих формат строк или . Максимальная длина префикса составляет 3072 байта для таблиц InnoDB, использующих формат строк или . Для таблиц MyISAM максимальная длина префикса составляет 1000 байт.
Ограничения префиксов измеряются в байтах, а длина префикса в операторах CREATE TABLE, ALTER TABLE и CREATE INDEX интерпретируется как число символов для небинарных строковых типов (CHAR, VARCHAR, TEXT) и число байт для бинарных строковых типов (BINARY, VARBINARY, BLOB). Учтите это при указании длины префикса для небинарного строкового столбца, использующего многобайтовую кодировку символов.
Если поисковый термин превышает длину префикса индекса, индекс используется для исключения несоответствующих строк, а оставшиеся строки проверяются на возможные совпадения.
Дополнительную информацию о префиксах индексов см. в Разделе 15.1.15, «Оператор CREATE INDEX».
Индексы FULLTEXT
Индексы FULLTEXT используются для полнотекстового поиска. Только движки хранения InnoDB и MyISAM поддерживают индексы FULLTEXT, и только для столбцов типа CHAR, VARCHAR и TEXT. Индексирование всегда выполняется по всему столбцу, и индексирование префиксов столбцов не поддерживается. Подробнее см. в Разделе 14.9, «Функции полнотекстового поиска».
Оптимизации применяются к определённым видам запросов FULLTEXT к отдельным таблицам InnoDB. Запросы с такими характеристиками особенно эффективны:
Запросы
FULLTEXT, возвращающие только идентификатор документа или идентификатор документа и рейтинг поиска.Запросы
FULLTEXT, сортирующие совпадающие строки в порядке убывания оценки и применяющие условиеLIMITдля получения N лучших совпадающих строк. Для применения этой оптимизации не должно быть условийWHEREи только одно условиеORDER BYв порядке убывания.Запросы
FULLTEXT, возвращающие только значениеCOUNT(*)строк, соответствующих поисковому термину, без дополнительных условийWHERE. УсловиеWHEREзаписывается какWHERE MATCH(, без оператора сравненияtext) AGAINST ('other_text')> 0.
Для запросов, содержащих полнотекстовые выражения, MySQL оценивает эти выражения на стадии оптимизации выполнения запроса. Оптимизатор не просто рассматривает полнотекстовые выражения и делает оценки, а фактически оценивает их в процессе разработки плана выполнения.
Следствием этого поведения является то, что оператор EXPLAIN для полнотекстовых запросов, как правило, медленнее, чем для запросов без полнотекстового поиска, для которых не происходит оценка выражений на стадии оптимизации.
Оператор EXPLAIN для полнотекстовых запросов может показывать Select tables optimized away в столбце Extra из-за соответствия, происходящего во время оптимизации; в этом случае доступ к таблицам может не потребоваться в ходе последующего выполнения.
Пространственные индексы
Вы можете создавать индексы для пространственных типов данных. Движки хранения MyISAM и InnoDB поддерживают R-дерево индексов для пространственных типов. Другие движки хранения используют B-деревья для индексирования пространственных типов (за исключением ARCHIVE, который не поддерживает индексирование пространственных типов).
Индексы в движке хранения MEMORY
Движок хранения MEMORY по умолчанию использует HASH индексы, но также поддерживает BTREE индексы.
© 2025 Oracle
Licensed under the GPLv2 License.