【发布时间】:2012-10-22 22:39:01
【问题描述】:
我正在开发一个相当标准的 Django 应用程序,最近我一直在调整管理员。虽然列表视图以合理的速度加载,但细节和添加视图需要大约 10 秒才能加载。
我不确定为什么会这样——我怀疑这与数据库被过度查询有关,事实上确实如此。打开日志记录后,我发现控制器正在查询表中的每个 id:
...
[Mon Oct 22 18:32:52 2012] [error] (0.001) SELECT `courses_course`.`id`, `courses_course`.`semester`,
`courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2077 ; args=(2077,)
[Mon Oct 22 18:32:52 2012] [error] (0.000) SELECT `courses_course`.`id`, `courses_course`.`semester`,
`courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2078 ; args=(2078,)
[Mon Oct 22 18:32:52 2012] [error] (0.001) SELECT `courses_course`.`id`, `courses_course`.`semester`,
`courses_course`.`name`, `courses_course`.`credits`, `courses_course`.`description`, `courses_course
`.`history_id`, `courses_course`.`oldpcr_id`, `courses_course`.`primary_alias_id` FROM `courses_cours
e` WHERE `courses_course`.`id` = 2079 ; args=(2079,)
...
有人可以解释为什么会这样吗?我想不出任何可以解释它的东西。
【问题讨论】:
-
你如何调整管理员?
-
没什么意义——只是添加 ModelAdmins 以启用搜索和过滤等。我在开始之前就注意到了这种影响,很可能是我之前的某个人负责——但我真的猜不出从哪里开始寻找。
-
我想我以前见过这种行为。原因:我没有在查询中使用 select_related
-
所以简单地将其设置为 true 并没有多大帮助,但至少这是一个有用的线索。
-
设置为true是什么意思? select_related 是一个 QuerySet 方法。看看select_related
标签: django django-admin