2017-10-31 1 views
0

Ich muss diese Abfrage optimieren, weil es mehr Zeit in Anspruch nimmt und ich Gruppe mit group_category und user_comments genehmigen möchte.Abfrage mit Include in Schienen optimieren 4

@latest = Group.scope_approved 
       .order('id desc') 
       .includes(:group_category, :user_comments) 
       .paginate(page: params[:page], per_page: 10) 

Es gibt Tausende von Datensätzen in der Gruppe.

ich mit 'mysql2' bin, '~> 0.3.18'

Jede Idee?

(von Kommentar)

Group Load (5.4ms) 
SELECT groups.* 
    FROM groups 
    WHERE groups.approved = 1 
    ORDER BY id desc 
    LIMIT 10 OFFSET 0 

GroupCategory Load (1.2ms) 
SELECT group_categories.* 
    FROM group_categories 
    WHERE group_categories.id IN (16, 3, 10, 1, 14) 

UserComment Load (73635.3ms) 
SELECT user_comments.* 
    FROM user_comments 
    WHERE user_comments.commentable_type = 'Group' 
     AND user_comments.commentable_id IN (67142, 67141, 67140, 
       67137, 67136, 67135, 67134, 67131, 67130, 67129) 

(61.3ms) 
SELECT COUNT(*) 
    FROM groups 
    WHERE groups.approved = 1 
+0

zeigen Sie Ihr Protokoll, wenn die Abfrage wird Feuer sowie zeigen Sie Ihre scope_approved Methode –

+0

Group Load (5.4ms) SELECT 'Gruppen'. * FROM' Gruppen' WHERE 'groups'.approved' = 1 ORDER BY id desc LIMIT 10 OFFSET 0 GroupCategory Laden (1.2ms) SELECT 'group_categories'. * FROM' group_categories' WHERE 'group_categories'.id' IN (16, 3, 10, 1, 14) UserComment Laden (73635.3ms) SELECT' user_comments'. * FROM 'user_comments' WHERE' user_comments'.commentable_type' = 'Group' UND 'user_comments'.commentable_id' IN (67142, 67141, 67140, 67137, 67136, 67135, 67134, 67131, 67130, 67129) (61.3ms) SELECT COUNT (*) Von 'Gruppen' WHERE' groups'.approved' = 1 –

+0

Bitte löschen Sie diesen Code aus dem Kommentar und fügen Sie ihn mit Ihrer Frage –

Antwort

0

user_comments würde von INDEX(commentable_type, commentable_id) (in dieser Reihenfolge) profitieren. Dies würde die 3. Abfrage beschleunigen.