Оптимизация запросов MySQL

deepslam

Новичок
Всем привет!

При просмотре вакансий, увидел интересное задание оптимизировать запрос, у меня вариантов его оптимизации больше не возникло, поэтому хотел спросить у сообщества что можно с ним еще сделать и где про это есть хорошая дока или книга какая, сейчас очень интересуюсь этой темой, но информации нахожу буквально по крупицам.


Вот собственно задание:

Имеется таблица:
create table activity
(
activity_id int primary key auto_increment,
user_id int not null,
activity_type int not null,
activity_data text,
key(user_id)
) engine=innodb

Какую оптимизацию можете предложить для sql-запроса "select activtiy_id, activity_type, user_id from activity where user_id in (...)"?
Из предложений у меня только сделать activity_type ключом, остальное вроде гуд. Ну счетчик auto_increment прописать это понятно.

Всем спасибо за ответы!
 

zerkms

TDD infected
Команда форума
Из предложений у меня только сделать activity_type ключом, остальное вроде гуд. Ну счетчик auto_increment прописать это понятно.
Зачем вообще трогать activity_type? Для указанного запроса всё, что нужно было сделать (покрыть user_id индексом) уже было сделано
 

deepslam

Новичок
Ну если спрашивают, значит можно сделать что то еще?
Выборка IN это правильно она работает быстрее, user_id ключ, у меня тоже больше вариантов нет.
 

Gas

может по одной?
возможно хотят услышать тупые ответы в стиле:
- сделать составной индекс user_id,activity_type (так-как innodb, то primary key в конец любого индекса и так добавляется), в таком случае данные будут вычитываться полностью из индекса не затрагивая страниц данных;
- заменить in (...) на набор union'ов с id = ...

но в реальности такие вещи вредны и годятся только для порассуждать в случаях, когда от тебя ждут какой-то полёт фантазии.

как сказал zerkms
Для указанного запроса всё, что нужно было сделать (покрыть user_id индексом) уже было сделано
 
Сверху