Какой индекс поставить в таблицу mysql?

Есть большая таблица больше 10 гигобайт, есть запрос такого типа
SELECT * from humans WHERE `lastname_id` = '223' AND `firstname_id` = '72' ORDER BY `rate` DESC LIMIT 10 OFFSET 10
Какой индекс необходимо поставить для максимального быстродействия?
Сейчас стоит на lastname_id, firstname_id и rate а также составной на всех этих трех полях.
Таблица innodb.
  • Вопрос задан
  • 388 просмотров
Решения вопроса 1
При построении составных индексов учитывайте то, какой объем данных у вас будет попадать на первый и второй индекс. Выполнив два запроса SELECT lastname_id, count(*) FROM t GROUP BY lastname_id и SELECT firstname_id, count(*) FROM t GROUP BY firstname_id , можно увидеть, сколько записей содержит каждое значение колонки в таблице. Там, где меньше - ту колонку и нужно ставить первой в индекс, так как если среднее кол-во значений lastname_id будет равно 1000, а firstname_id - 20000, то MySQL сразу сократит количество перебираемых записей до 1000, вместо 20000.

Так же советую почитать про EXPLAIN - очень помогает находить тяжелые запросы и лучше понять, как MySQL делает поиск.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Если у вас стоит составной индекс на три поля lastname_id, firstname_id и rate, то автоматически mysql создает индекс для каждого поля в отдельности. Индексы ставятся на те поля, по которым идет поиск в запросах. В данном случае у вас правильно настроены индексы, если исходить из вашего SQL-запроса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы