0

2つの一見同じように見えるクエリ(私のような初心者が知る限り、最初のクエリは部分的なテンプレートレンダリング時間で全体的に高速です(idsステートメント以外は何も変更されていません)。また、rails consoleを介してテストすると、後者は目に見えて実行されますクエリ、前者はそうではありません。なぜ-そしてなぜ最初のステートメントが2番目のステートメントよりも数ミリ秒速いのか-私は理解していませんが、同じ結果を得るにはメソッドチェーンが短いためだと推測できます。

更新:私の悪い。それらは同じクエリを実行していませんが、すべての列での選択が1つの列での選択よりもどのように高速であるかは興味深いことです。たぶん、それはメソッドチェーンと比較して無視できる違いです。

ids = current_user.activities.map(&:person_id).reverse
SELECT "activities".* FROM "activities" WHERE "activities"."user_id" = 1
SELECT "people".* FROM "people" WHERE "people"."id" IN (1, 4, 12, 15, 3, 14, 17, 10, 5, 6) Rendered activities/_activities.html.haml (7.4ms)


ids = current_user.activities.order('id DESC').select{person_id}.map(&:person_id)
SELECT "activities"."person_id" FROM "activities" WHERE "activities"."user_id" = 1 ORDER BY id DESC    
SELECT "people".* FROM "people" WHERE "people"."id" IN (1, 4, 12, 15, 3, 14, 17, 10, 5, 6) Rendered activities/_activities.html.haml (10.3ms)

ステートメントの目的は、アクティビティテーブル(PK上)に表示された順序で人々への外部キー参照を取得することです。注: SQLにはSqueelを使用しています。

4

1 に答える 1

1

最初のクエリでは、.mapと.reverseをチェーンしましたが、2番目のクエリでは、.reverseを追加した場合は不要な.order('id DESC').select(person_id)を使用しました。

于 2012-04-14T08:03:01.057 に答える