Django访问数据库

时间:2011-05-09 04:42:23

标签: django django-models

在Django模型API中使用以下LIMIT子句时 -

People.objects.all()[5000000:5000000+5]

数据库是否必须通过所有5M记录才能返回这5条记录?或者它的访问是非线性的吗?

2 个答案:

答案 0 :(得分:1)

至少会通过索引表获取People表的主键。在我看来,这个问题与Django如何处理这个问题无关。 Django会像你的数据库那样处理它。 Django的ORM只会将其转换为类似于此的查询:

SELECT * FROM peoples OFFSET 5000000 LIMIT 5;

答案 1 :(得分:0)

简而言之,它会在此之前进行扫描并获取您指定的记录数。这实际上取决于您的数据库,不同的数据库在此查询上有不同的性能。它不是随机访问,如果你这样做5次,你应该期望返回相同的记录,假设你的数据没有改变。如果您执行order_by,您将获得更可预测的结果。