ユーザーのグループを取得しようとしている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 でこのクエリを正しく構成していませんか?