2017-10-31 4 views
0

このクエリは時間がかかり、グループをgroup_categoryuser_commentsで承認したいので、このクエリを最適化する必要があります。レールでのインクルードを使用してクエリを最適化する

グループには何千ものレコードがあります。

私は 'mysql2'、 '〜> 0.3.18'

任意のアイデアを使用していますか? (コメントから)

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

クエリが起動しているときにログを表示し、scope_approvedメソッドを表示します –

+0

グループロード(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'.idid IN(16,3,10,1,14) UserComment Load(73635.3ms)SELECT' (67142,67141,67140,67137,67136,67135,67134,67131,67130,67129)のように、「user_comments」から「from user_comments」。* FROM 'user_comments' WHERE' user_comments'.commentable_type' = 'Group' AND 'user_comments'.commentable_id' (61.3ms) 'groups'.approved' = 1 –

+0

からこの数字をクリアして質問に添付してください。 –

答えて

0

user_commentsは(この順序で)INDEX(commentable_type, commentable_id)恩恵を受ける。これは3番目のクエリを高速化します。

関連する問題