Fernus
@Fernus
Техник - Механик :)

Индексы. Какие лучше создать?

Представим такую структуру таблицы:

Название поля | Примерное соотношение уникальных данных в каждом поле от общего числа в таблице, например, 3 млн. строк:

link_id | 1-5
field1_id | 100
field2_id | 2500
field3_id | 3500
field4_id | 50

Т.е. из 3 млн. записей, например, если взять:
- link_id, то будет от 1 до 5 уникальных;
- field1_id - будет около 100 уникальных и т.д...

Как Вы, наверное, поняли - это "связывающая" таблица...
Выборка может производится "перекрёстно" по любым полям...но в основном такие ситуации (если прям упростить очень):

1. Выбрать все уникальные field1_id с условием совпадения field4_id;
2. Выбрать все уникальные field2_id с условием совпадения field1_id И field4_id;
3. Выбрать все уникальные field3_id с условием совпадения field2_id И field4_id;
4. Выбрать все уникальные link_id с условием совпадения field2_id И field3_id И field4_id.

UPD:
Выше в условиях по каждому полю чаще WHERE IN...а между ними AND...

Как Вы бы расставили индексы?

Думаю из составных, как минимум, сделать такие:
field1_id_field4_id
field2_id_field3_id_field4_id

Из одиночных:
link_id
field4_id

Плодить не хочется "лишних"...можно и на каждое поле ещё по индексу отдельному конечно...но это не всегда правильно, да и при добавлении/обновлении скорость теряться будет...а предполагается ещё и частое изменение данных...
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
Fernus
@Fernus Автор вопроса
Техник - Механик :)
Короче, если кому-то пригодится подобный "расклад" в похожей структуре данных в таблице...

Получилось так:

Одиночные:
INDEX field4_id
INDEX link_id

Составные:
INDEX field4_id, field2_id, field3_id
INDEX field4_id, field1_id, field2_id, field3_id

НО, мне кажется, либо есть лишние индексы, либо чего-то не хватает... :)
Долго времени на "эксперементы" с MySQL не было...хотел просто посоветоваться с теми, кто "собаку" съел уже на этом, так сказать))

Для меня результат получился приемлемым...
Соотношение данных приведено в вопросе...поэтому считаю это ответом.

Буду рад, конечно, принять поправки!
Спасибо)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ComodoHacker
В таких неочевидных случаях нужно моделировать. На более или менее реальных объемах.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы