Spec-Zone .ru
спецификации, руководства, описания, API
|
Индексирует используются, чтобы найти строки с определенными значениями столбцов быстро. Без индексирования MySQL должен начаться с первой строки и затем прочитать всю таблицу, чтобы найти соответствующие строки. Чем больше таблица, тем больше это стоит. Если у таблицы есть индексирование для рассматриваемых столбцов, MySQL может быстро определить позицию, чтобы искать на в середине файла данных, не имея необходимость смотреть на все данные. Если у таблицы есть 1 000 строк, это по крайней мере в 100 раз быстрее чем чтение последовательно.
Большинство MySQL индексирует (PRIMARY KEY
, UNIQUE
,
INDEX
, и FULLTEXT
) сохранены в B-деревьях.
Исключения, это индексирует на пространственных R-деревьях использования типов данных, и этом MEMORY
таблицы также поддерживают хеш, индексирует.
Вообще, индексирует, используются как описано в следующем обсуждении. Характеристики, определенные для хеша,
индексируют (как использующийся в MEMORY
таблицы), описываются в конце этого
раздела.
Использование MySQL индексирует для этих операций:
Найти строки, соответствующие a WHERE
пункт быстро.
Устранить строки из рассмотрения. Если есть выбор между многократным, индексирует, MySQL обычно использует индексирование, которое находит самое маленькое число строк (самые выборочные индексируют).
Получать строки от других таблиц, выполняя соединения. MySQL может использовать,
индексирует на столбцах более эффективно, если они объявляются как тот же самый тип и размер. В этом
контексте, VARCHAR
и CHAR
считаются тем же самым, если они объявляются как тот же самый
размер. Например, VARCHAR(10)
и CHAR(10)
тот
же самый размер, но VARCHAR(10)
и CHAR(15)
не.
Сравнение несходных столбцов может предотвратить использование, индексирует, если значения не могут
быть сравнены непосредственно без преобразования. Предположите, что числовой столбец по сравнению со
строковым столбцом. Для данного значения такой как 1
в числовом столбце
это могло бы сравниться равный любому числу значений в строковом столбце такой как '1'
, ' 1'
, '00001'
, или '01.e1'
. Это исключает
использование любого, индексирует для строкового столбца.
Найти MIN()
или MAX()
значение
для определенного индексированного столбца key_col
. Это
оптимизируется препроцессором, который проверяет, используете ли Вы WHERE
на всех ключевых ролях, которые происходят прежде key_part_N
= constant
key_col
в
индексировании. В этом случае MySQL делает единственный ключевой поиск для каждого MIN()
или MAX()
выражение и замены это с константой. Если все выражения
заменяются константами, возвраты запроса сразу. Например:
SELECT MIN(key_part2
),MAX(key_part2
) FROMtbl_name
WHEREkey_part1
=10;
Сортировать или группировать таблицу, если сортировка или группировка делаются на
крайнем левом префиксе применимого ключа (например, ORDER BY
).
Если все ключевые роли сопровождаются key_part1
, key_part2
DESC
, ключ читается в обратном
порядке. См. Раздел 8.13.13,"ORDER
BY
Оптимизация", и Раздел
8.13.14,"GROUP BY
Оптимизация".
В некоторых случаях запрос может быть оптимизирован, чтобы получить значения, не консультируясь со строками данных. (Индексирование, которое обеспечивает все необходимые результаты для запроса, вызывают, покрытие индексирует.), Если запрос использует только столбцы от таблицы, которые являются числовыми и та форма крайний левый префикс для некоторого ключа, выбранные значения могут быть получены от индексировать дерева для большей скорости:
SELECTkey_part3
FROMtbl_name
WHEREkey_part1
=1
Индексирует менее важны для запросов на маленьких таблицах, или больших таблицах, где запросы отчета обрабатывают больше всего или все строки. Когда запрос должен получить доступ к большинству строк, читая последовательно быстрее чем работа посредством индексирования. Последовательные чтения минимизируют поиск на диске, даже если не все строки необходимы для запроса. См. Раздел 8.2.1.4, "Как Избежать Полных Сканирований таблицы" на предмет деталей.