Я играл с EXPLAIN и запустил его по этому простому запросу:
EXPLAIN SELECT * FROM actions WHERE user_id = 17;
И был очень удивлен, увидев этот вывод:
select_type SIMPLE
table actions
type ALL
possible_keys user_id
key null
key_len null
ref null
rows 6
extra Using where
Насколько я понимаю, это означает, что индекс не используется при поиске, верно? (В данный момент в таблице всего 6 строк, но их будет гораздо больше)
Определение таблицы (входная):
CREATE TABLE `actions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
...
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1
Почему бы не использовать значение ключа для user_id?