From 276e053803c847ce645b1859a162a997a4ee3789 Mon Sep 17 00:00:00 2001 From: e0ne Date: Sun, 8 Sep 2013 22:57:36 +0300 Subject: [PATCH] [1.6.x] Fixed #16895 -- Warned about cost of QuerySet ordering Thanks outofculture at gmail.com for the suggestion. Backport of cbf08c6b0c from master --- docs/ref/models/options.txt | 6 ++++++ docs/ref/models/querysets.txt | 6 ++++++ docs/topics/db/optimization.txt | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/docs/ref/models/options.txt b/docs/ref/models/options.txt index 6413050cb7..36b3cded1f 100644 --- a/docs/ref/models/options.txt +++ b/docs/ref/models/options.txt @@ -216,6 +216,12 @@ Django quotes column and table names behind the scenes. ordering = ['-pub_date', 'author'] +.. warning:: + + Ordering is not a free operation. Each field you add to the ordering + incurs a cost to your database. Each foreign key you add will + impliclty include all of its default orderings as well. + ``permissions`` --------------- diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt index c5b835f55f..ec89eacfc4 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -336,6 +336,12 @@ You can tell if a query is ordered or not by checking the :attr:`.QuerySet.ordered` attribute, which will be ``True`` if the ``QuerySet`` has been ordered in any way. +.. warning:: + + Ordering is not a free operation. Each field you add to the ordering + incurs a cost to your database. Each foreign key you add will + impliclty include all of its default orderings as well. + reverse ~~~~~~~ diff --git a/docs/topics/db/optimization.txt b/docs/topics/db/optimization.txt index c1459ae247..cca2e6381b 100644 --- a/docs/topics/db/optimization.txt +++ b/docs/topics/db/optimization.txt @@ -306,6 +306,17 @@ instead of:: entry.blog.id +Don't order results if you don't care +------------------------------------- + +Ordering is not free; each field to order by is an operation the database must +perform. If a model has a default ordering (:attr:`Meta.ordering +`) and you don't need it, remove +it on a ``QuerySet`` by calling +:meth:`~django.db.models.query.QuerySet.order_by()` with no parameters. + +Adding an index to your database may help to improve ordering performance. + Insert in bulk ==============