【发布时间】:2015-01-09 22:35:58
【问题描述】:
我有这些each 循环:
<% relation_types.each do |relation| %>
<% if !current_user.memberships.where(relation: relation).empty? %>
<% current_user.memberships.where(relation: relation).each do |membership| %>
<% end %>
两者都会在每次页面加载时生成此日志:
User Load (32.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
FamilyTree Load (6.2ms) SELECT "family_trees".* FROM "family_trees" WHERE "family_trees"."user_id" = $1 LIMIT 1 [["user_id", 1]]
(3.0ms) SELECT "memberships"."relation" FROM "memberships" WHERE "memberships"."family_tree_id" = $1 [["family_tree_id", 1]]
(3.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'great_grandmother' [["user_id", 1]]
(17.9ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'great_grandfather' [["user_id", 1]]
(3.3ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'grandmother' [["user_id", 1]]
(1.8ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'grandfather' [["user_id", 1]]
(3.5ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'mom' [["user_id", 1]]
(14.9ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'dad' [["user_id", 1]]
(2.8ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'aunt' [["user_id", 1]]
(3.9ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'uncle' [["user_id", 1]]
Membership Load (3.4ms) SELECT "memberships".* FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'uncle' [["user_id", 1]]
(2.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'sister' [["user_id", 1]]
(14.2ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'brother' [["user_id", 1]]
Membership Load (3.2ms) SELECT "memberships".* FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'brother' [["user_id", 1]]
(3.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'cousin' [["user_id", 1]]
(4.3ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'daughter' [["user_id", 1]]
(3.8ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'son' [["user_id", 1]]
(5.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'niece' [["user_id", 1]]
(3.0ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'nephew' [["user_id", 1]]
Membership Load (3.9ms) SELECT "memberships".* FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'nephew' [["user_id", 1]]
(2.4ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'granddaughter' [["user_id", 1]]
(10.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'grandson' [["user_id", 1]]
(4.7ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'great_granddaughter' [["user_id", 1]]
(5.4ms) SELECT COUNT(*) FROM "memberships" WHERE "memberships"."user_id" = $1 AND "memberships"."relation" = 'great_grandson' [["user_id", 1]]
这是Membership 的架构和关联:
# == Schema Information
#
# Table name: memberships
#
# id :integer not null, primary key
# family_tree_id :integer
# user_id :integer
# created_at :datetime
# updated_at :datetime
# relation :string(255)
class Membership < ActiveRecord::Base
attr_accessible :user_id, :relation
belongs_to :family_tree
belongs_to :user
end
如何优化?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 optimization query-optimization