【发布时间】:2017-10-31 08:38:47
【问题描述】:
我需要优化这个查询,因为它需要更多时间,而且我
想要通过group_category 和user_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.* FROMgroupsWHEREgroups.approved= 1 ORDER BY id desc LIMIT 10 OFFSET 0 GroupCategory Load (1.2ms) SELECT @ 987654329@.* FROMgroup_categoriesWHEREgroup_categories.idIN (16, 3, 10, 1, 14) UserComment Load (73635.3ms) SELECTuser_comments.* FROMuser_commentsWHERE @987654335 987654336@ = '组' ANDuser_comments.commentable_idIN (67142, 67141, 67140, 67137, 67136, 67135, 67134, 67131, 67130, 67129) (61.3ms) SELECT COUNT(*4) WHER@9865groups.approved= 1 -
请从评论中清除此代码并将其附在您的问题中
-
scope_approved 是显示批准组的组范围。
-
显示
scoped_approved的代码。 “更多时间”是什么意思?你对它进行基准测试吗?与请求时间相比,查询花费了多少时间?
标签: mysql ruby-on-rails ruby-on-rails-4 query-optimization