Исправлен N + 1 запрос в геме "Declarative_authorization" с помощью гема "bullet" - PullRequest
4 голосов
/ 17 ноября 2011

В настоящее время я работаю над одним большим веб-приложением, и чтобы оно работало быстрее, я решил провести рефакторинг всех N + 1 запросов (чтобы уменьшить количество запросов к базе данных, http://rails -bestpractices.com / posts / 29-fix-N-1-запросов ).Поэтому я установил гем "bullet", который сейчас не работает с Rails 3.1.1 (вы можете использовать форк с https://github.com/flyerhzm/bullet).. При использовании гем декларативного_авторизации на каждой странице я получаю одинаковые предупреждения:

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

...

Не могли бы вы помочь мне с этим и сделать эти запросы быстрее?

1 Ответ

2 голосов
/ 27 ноября 2011

Я бы удалил драгоценный камень, но добавил бы :include в каждой из двух моделей.

...