Mysql django查询的费用
我有两张桌子:演员和图像。Images表通过外键链接到Actor表。我可能会对Actor进行查询,从中提取所有Actor的列表,其名字以字母a开头。假设我将此查询结果存储在Actor_列表中,并将其传递给模板。通过迭代,我可以通过模板获得所有图像的列表。比如:Mysql django查询的费用,mysql,django,django-templates,Mysql,Django,Django Templates,我有两张桌子:演员和图像。Images表通过外键链接到Actor表。我可能会对Actor进行查询,从中提取所有Actor的列表,其名字以字母a开头。假设我将此查询结果存储在Actor_列表中,并将其传递给模板。通过迭代,我可以通过模板获得所有图像的列表。比如: {% for actor in actor_list %} {% for image in actor.img_set %} {{ image }} {% endfor %} {% endfor %} 这对
{% for actor in actor_list %}
{% for image in actor.img_set %}
{{ image }}
{% endfor %}
{% endfor %}
这对数据库来说代价高昂吗?关联的img_集是否与初始actor对象列表一起通过,或者每次我调用actor.img_集时是否都会有一个新的查询命中数据库?您应该安装,并查看封面下发生了什么SQL查询
如果查询太多,可以尝试使用select_related()在初始查询中拉入相关数据。使用连接库比使用django工具栏更好。调试设置为True时:
>>> from django.db import connection
>>> for actor in actor_list:
>>> for image in actor.img_set:
>>> image
>>> connection.queries()
这将显示执行的所有查询以及每个查询花费的时间
调试工具栏很酷,但有很多用途。:-) 同意调试工具栏的建议,但是在出现反向关系的情况下,
select_related()
不会有帮助,这似乎是这样的。@ed:除了Daniel的评论和你的最后一个问题:如果是反向关系,每个演员都会点击数据库来获得他的图像集……谢谢你的输入。跟进问题。在从Django调试工具栏检查SQL之后,我看到数据库甚至因为以下原因而受到影响:{{actor_list.0.id}。当已经创建了actor_列表时,为什么SQL查询会退出?但是,如果我遍历actor_列表并以这种方式提取id,则不会创建额外的查询