當前我正在處理一個大型Web應用程序並使其工作更快我決定重構所有N + 1個查詢(以減少對數據庫的請求數,http://rails-bestpractices.com/posts/29-fix-n-1-queries)。所以我安裝了現在不支持Rails 3.1.1的寶石「bullet」(你可以使用https://github.com/flyerhzm/bullet的分支)。當每一頁上使用declarative_authorization寶石,我得到同樣的警告:使用gem「bullet」修復「declarative_authorization」gem中的N + 1查詢
N+1 Query detected
Role => [:permissions]
Add to your finder: :include => [:permissions]
N+1 Query detected
Permission => [:permission_rules]
Add to your finder: :include => [:permission_rules]
CACHE (0.0ms) SELECT "roles".* FROM "roles"
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 1
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 2
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 3
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 4
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 6
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 7
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 8
CACHE (0.0ms) SELECT "permission_rules".* FROM "permission_rules" INNER JOIN "permission_rules_permissions" ON "permission_rules"."id" = "permission_rules_permissions"."permission_rule_id" WHERE "permission_rules_permissions"."permission_id" = 30
CACHE (0.0ms) SELECT "permission_rules".* FROM "permission_rules" INNER JOIN "permission_rules_permissions" ON "permission_rules"."id" = "permission_rules_permissions"."permission_rule_id" WHERE "permission_rules_permissions"."permission_id" = 31
...
能否請你幫我與和使這個查詢更快?
你能發佈導致這些警告的Rails應用程序的實際代碼嗎? – Tilo