0

我有一个 Rails 3.2 应用程序,我试图在其中获取一组用户。我的 Rails 查询代码如下所示:

@users = User.where("user_id IN (?)", foo)

生成以下 SQL:

SELECT 'users'.* FROM 'users' WHERE id IN (1, 2, 3, 4)

当我对此查询运行解释时,它正在搜索我的用户表中的所有行。它PRIMARY在该possible_keys字段下列出,但键显示为空。

如果我删除“IN (?)”部分并只提取一条记录:

@user = User.where("user_id = ?", bar)

生成

SELECT 'users'.* FROM 'users' WHERE id = 1

然后使用主键作为索引执行查询,只搜索一行。

知道为什么这在我的第一个示例中不起作用吗?我是否在 Rails 中错误地构造了这个查询?

4

1 回答 1

0

问题不在于 Rails,这是“如何”编写你的 sql。

当您使用“in”子句时,查询不要使用它的索引。

您可以查看以下链接:

MySQL 不使用带有 WHERE IN 子句的索引?

http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

于 2012-07-24T19:38:53.333 回答