2011-05-09 87 views
0

当Django模型API使用以下LIMIT子句 -Django的数据库访问

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

数据库是否有为了回报只是这5个记录经过的所有5M记录?或者它的访问是非线性的?

回答

1

它将至少通过您的People表的主键索引表。在我看来,这个问题在Django如何处理这个问题上没有任何关系。 Django会像你的数据库一样处理它。 Django的ORM只会将其转化为一个查询类同这一个:

SELECT * FROM peoples OFFSET 5000000 LIMIT 5;

0

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

+0

对不起,我的意思是非线性的访问,而不是随机访问。这应该使问题更清楚。 – David542 2011-05-09 04:59:05