2011-05-09 7 views
0

Lorsque vous utilisez la clause LIMIT suivante dans les modèles Django API -base de données Django accès

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

Est-ce que la base de données à passer par tous les enregistrements 5M pour revenir seulement ces 5 dossiers? Ou est-ce non linéaire dans son accès?

Répondre

1

Il ira au moins à travers la table d'index pour la clé primaire de votre table People. A mon avis, cette question n'a rien à voir avec la façon dont Django gère cela. Django le traitera comme votre base de données le fera. ORM de Django va simplement transformer en une requête similaire à celui-ci:

SELECT * FROM peoples OFFSET 5000000 LIMIT 5;

0

En bref, il effectue une analyse jusqu'à ce point et obtient le nombre d'enregistrements que vous spécifiez. Cela dépend en fait de votre base de données, différentes bases de données ont des performances différentes sur cette requête. Ce n'est pas un accès aléatoire, vous devriez vous attendre à ce que les mêmes enregistrements soient renvoyés si vous le faites 5 fois, en supposant que vos données n'ont pas changé. Si vous faites une commande, vous obtiendrez des résultats encore plus prévisibles.

+0

Désolé, je voulais dire un accès non linéaire, sans accès aléatoire. Cela devrait rendre la question plus claire. – David542

Questions connexes