@XXX-prog

MYSQL индексирование. Как парвильно составить индексы?

К примеру есть таблица, id, name, last_name, age, growth, weight. Допустим она разрастается до 3 млрд. записей. Понятно, что надо индексировать. Вопрос только как правильно учитывая, что поиск может быть как по нескольким колонкам так и по 1. Пишут, что если сделать составной то поиск будет быстрее, но как я предугадаю все варианты?
Я имею ввиду, что искать я могу так:
name, last_name, age, growth, weight
name, last_name, age, growth
name, last_name, age
name, last_name
name...

Вариантов масса
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 4
sim3x
@sim3x
Неа
Вариантов ровно столько сколько видов запросов делается к таблице
Ответ написан
villiwalla
@villiwalla
HTML-верстка
Пишут, что если сделать составной то поиск будет быстрее

Составной нужен когда запрос с более чем 1 колонкой.

но как я предугадаю все варианты?

Не надо пред угадывать. Смотри какие запросы у тебя есть по таблице. Главное смотри что бы для запроса индекс работал полностью, если полностью не будет работать значит он не подходит.

Я имею ввиду, что искать я могу так:
name, last_name, age, growth, weight
name, last_name, age, growth
name, last_name, age
name, last_name
name...

Ты про SELECT или WHERE, ORDERи тд?
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тут всё зависит от ваших конкретных поисковых запросов. Если поиск идёт по точному совпадению (`name` = 'value') или по началу строки (`name` LIKE 'value%'), то индекс будет использоваться, если по функции (lower(`name`) = 'value') или по подстроке (name LIKE '%value%'), то не будет.

Составной индекс используется только начиная с первых полей. То есть, если вы сделаете индекс (`name`, `last_name`, `age`, `growth`, `weight`), то при поиске по `name` и `last_name` он будет использоваться, а при поиске только по `last_name` - не будет.

Предугадывать не надо, надо смотреть, какие частые запросы вызывают больше всего нагрузки на сервер и дольше всего отрабатываются, их и оптимизировать.
Ответ написан
Вам бы вместо mysql использовать что-то типа elasticsearch
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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