From cbf08c6b0ca39406cada4bd1ffc6d334a79822e8 Mon Sep 17 00:00:00 2001 From: e0ne Date: Sun, 8 Sep 2013 22:57:36 +0300 Subject: [PATCH] Fixed #16895 -- Warned about cost of QuerySet ordering Thanks outofculture at gmail.com for the suggestion. --- 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 ee7d9d7116..1caeadddf9 100644 --- a/docs/ref/models/options.txt +++ b/docs/ref/models/options.txt @@ -221,6 +221,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 c99d27769f..000415f028 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -334,6 +334,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 c99c84d9fa..ea919d76f8 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 ==============