0

ユーザーのグループを取得しようとしているRails 3.2アプリがあります。クエリの Rails コードは次のようになります。

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

これにより、次の SQL が生成されます。

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

このクエリで Explain を実行すると、users テーブルのすべての行が検索されます。PRIMARYフィールドの下にリストされますpossible_keysが、キーは null として表示されます。

"IN (?)" の部分を削除して、レコードを 1 つだけプルすると、次のようになります。

@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 に答える