Я пытаюсь оптимизировать некоторые запросы к базе данных в моем приложении Rails, и у меня есть несколько, которые заставили меня остановиться. Все они используют IN в предложении WHERE и все выполняют полное сканирование таблицы, даже если соответствующий индекс выглядит на месте.
Например:
SELECT `user_metrics`.* FROM `user_metrics` WHERE (`user_metrics`.user_id IN (N,N,N,N,N,N,N,N,N,N,N,N))
выполняет полное сканирование таблицы, а EXPLAIN говорит:
select_type: simple
type: all
extra: using where
possible_keys: index_user_metrics_on_user_id (which is an index on the user_id column)
key: (none)
key_length: (none)
ref: (none)
rows: 208
Используются ли индексы, не используемые, когда используется оператор IN, или мне нужно делать что-то по-другому? Запросы здесь генерируются Rails, поэтому я могу пересмотреть, как мои отношения определены, но я думал, что сначала начну с возможных исправлений на уровне БД.