我正在尝试优化我的Rails应用程序中的一些数据库查询,我有几个让我难过.他们都IN在WHERE子句中使用an 并且都在进行全表扫描,即使适当的索引似乎已经到位.
例如:
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生成的,所以我可以重新审视我的关系是如何定义的,但我想我首先要从数据库级别的潜在修复开始.