【发布时间】:2010-09-23 17:03:27
【问题描述】:
在我的具体情况下,我需要检索和分页两种“消息”。
我们省略细节,只说第一种在一个叫Msg1的模型中,另一种叫Msg2
这两个模型的字段完全不同,唯一两个模型共有的字段是“日期”和“标题”(当然还有id)。
我可以得到Msg1.objects.all()和Msg2.objects.all(),但是我可以将这两个查询合并为一个查询,按日期排序,然后分页吗?
我需要保留查询的惰性。
简单的解决方案是 list(query) 两个查询并将它们组合到一个 python 列表中。但这显然是低效的。
我查看了有关模型和 dp-api 的 django 参考资料,但似乎没有办法将不同模型/表的查询合并为一个。
【问题讨论】:
-
“由于显而易见的原因效率低下” 真的吗?你有指标吗?我问是因为没有明显的原因会导致效率低下。
-
我认为因为一旦你列出(查询)它就会得到所有结果,他想尽可能晚地离开。
-
效率低下,因为它会访问所有项目的数据库(可能是 1000 个),而每页仅显示 20 个左右..
-
查询处理相当复杂。实际测量是必不可少的。当 ORM 和数据库中存在缓存时,理论分析效果不佳。
-
你可能是对的,起初我绝对可以使用 list(query) 来启动和运行页面,但从长远来看,当表开始有数千条记录时,它可能很多最好使用不会命中数据库中每条记录的解决方案。
标签: sql django django-models