【问题标题】:Optimize query using include in rails 4在 rails 4 中使用 include 优化查询
【发布时间】:2017-10-31 08:38:47
【问题描述】:

我需要优化这个查询,因为它需要更多时间,而且我 想要通过group_categoryuser_comments 批准组。

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

组中有数千条记录。

我正在使用'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 

【问题讨论】:

  • 在查询触发时显示您的日志以及显示您的 scope_approved 方法
  • 组负载 (5.4ms) SELECT groups.* FROM groups WHERE groups.approved = 1 ORDER BY id desc LIMIT 10 OFFSET 0 GroupCategory Load (1.2ms) SELECT @ 987654329@.* FROM group_categories WHERE group_categories.id IN (16, 3, 10, 1, 14) UserComment Load (73635.3ms) SELECT user_comments.* FROM user_comments WHERE @987654335 987654336@ = '组' AND user_comments.commentable_id IN (67142, 67141, 67140, 67137, 67136, 67135, 67134, 67131, 67130, 67129) (61.3ms) SELECT COUNT(*4) WHER@9865 groups.approved = 1
  • 请从评论中清除此代码并将其附在您的问题中
  • scope_approved 是显示批准组的组范围。
  • 显示scoped_approved 的代码。 “更多时间”是什么意思?你对它进行基准测试吗?与请求时间相比,查询花费了多少时间?

标签: mysql ruby-on-rails ruby-on-rails-4 query-optimization


【解决方案1】:

user_comments 将受益于INDEX(commentable_type, commentable_id)(按此顺序)。这将加快第三次查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多