Выбор индексов в MySQL
В самом простом случае, индекс необходимо создавать для тех колонок, которые присутствуют в условии WHERE.
Рассмотрим запрос из примера:
SELECT * FROM users WHERE age = 29Нам необходимо создать индекс на колонку age:
CREATE INDEX age ON users(age);После этой операции MySQL начнет использовать индекс age для выполнения подобных запросов. Индекс будет использоваться и для выборок по диапазонам значений этой колонки:
SELECT * FROM users WHERE age < 29 СортировкаДля запросов такого вида:
SELECT * FROM users ORDER BY register_dateдействует такое же правило — создаем индекс на колонку, по которой происходит сортировка:
CREATE INDEX register_date ON users(register_date); Внутренности хранения индексовПредставим, что наша таблица выглядит так:
id | name | age1 | Den | 292 | Alyona | 153 | Putin | 894 | Petro | 12После создания индекса на колонку age, MySQL сохранит все ее значения в отсортированном виде:
age index12152989Кроме этого, будет сохранена связь между значением в индексе и записью, которой соответствует это значение. Обычно для этого используется первичный ключ:
age index и связь с записями12: 415: 229: 189: 3Уникальные индексы
MySQL поддерживает уникальные индексы. Это удобно для колонок, значения в которых должны быть уникальными по всей таблице. Такие индексы улучшают эффективность выборки для уникальных значений. Например:
SELECT * FROM users WHERE email = 'golotyuk@gmail.com';На колонку email необходимо создать уникальный индекс:
CREATE UNIQUE INDEX email ON users(email)Тогда при поиске данных, MySQL остановится после обнаружения первого соответствия. В случае обычного индекса будет обязательно проведена еще одна проверка (следующего значения в индексе).
Составные индексы
MySQL может использовать только один индекс для запроса. Поэтому, для запросов, в которых используется несколько колонок, необходимо использовать составные индексы.
Рассмотрим такой запрос:
SELECT * FROM users WHERE age = 29 AND gender = 'male'Нам следует создать составной индекс на обе колонки:
CREATE INDEX age_gender ON users(age, gender);Дата добавления: 2017-08-01; просмотров: 494;