summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Hurley <gabehr@gmail.com>2010-11-24 11:53:04 +0000
committerGabriel Hurley <gabehr@gmail.com>2010-11-24 11:53:04 +0000
commit857131685a059c82412f9952fc5560d83cc49950 (patch)
treeecbd6d3daa41bad452cc5b834cee226d655c589f
parent1c451c0f395a14e426c17a8eb059669fa3d0d7ab (diff)
[1.2.X] Fixed #14767 -- Reflowed paragraphs and cleaned up some markup/links in the topics/db/optimizations docs. Thanks to adamv for the report and patch.
Backport of [14690] from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14691 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--docs/topics/db/optimization.txt26
1 files changed, 14 insertions, 12 deletions
diff --git a/docs/topics/db/optimization.txt b/docs/topics/db/optimization.txt
index 62b581c730..7d51052a77 100644
--- a/docs/topics/db/optimization.txt
+++ b/docs/topics/db/optimization.txt
@@ -13,7 +13,7 @@ Profile first
As general programming practice, this goes without saying. Find out :ref:`what
queries you are doing and what they are costing you
<faq-see-raw-sql-queries>`. You may also want to use an external project like
-'django-debug-toolbar', or a tool that monitors your database directly.
+django-debug-toolbar_, or a tool that monitors your database directly.
Remember that you may be optimizing for speed or memory or both, depending on
your requirements. Sometimes optimizing for one will be detrimental to the
@@ -29,14 +29,16 @@ readability of your code. **All** of the suggestions below come with the caveat
that in your circumstances the general principle might not apply, or might even
be reversed.
+.. _django-debug-toolbar: http://robhudson.github.com/django-debug-toolbar/
+
Use standard DB optimization techniques
=======================================
...including:
* Indexes. This is a number one priority, *after* you have determined from
- profiling what indexes should be added. Use :attr:`django.db.models.Field.db_index` to add
- these from Django.
+ profiling what indexes should be added. Use
+ :attr:`django.db.models.Field.db_index` to add these from Django.
* Appropriate use of field types.
@@ -69,7 +71,7 @@ Understand cached attributes
As well as caching of the whole ``QuerySet``, there is caching of the result of
attributes on ORM objects. In general, attributes that are not callable will be
cached. For example, assuming the :ref:`example Weblog models
-<queryset-model-example>`:
+<queryset-model-example>`::
>>> entry = Entry.objects.get(id=1)
>>> entry.blog # Blog object is retrieved at this point
@@ -156,11 +158,11 @@ Don't retrieve things you don't need
Use ``QuerySet.values()`` and ``values_list()``
-----------------------------------------------
-When you just want a dict/list of values, and don't need ORM model objects, make
-appropriate usage of :meth:`~django.db.models.QuerySet.values()`.
+When you just want a ``dict`` or ``list`` of values, and don't need ORM model
+objects, make appropriate usage of :meth:`~django.db.models.QuerySet.values()`.
These can be useful for replacing model objects in template code - as long as
-the dicts you supply have the same attributes as those used in the template, you
-are fine.
+the dicts you supply have the same attributes as those used in the template,
+you are fine.
Use ``QuerySet.defer()`` and ``only()``
---------------------------------------
@@ -238,10 +240,10 @@ individual, use a bulk SQL UPDATE statement, via :ref:`QuerySet.update()
<topics-db-queries-update>`. Similarly, do :ref:`bulk deletes
<topics-db-queries-delete>` where possible.
-Note, however, that these bulk update methods cannot call the ``save()`` or ``delete()``
-methods of individual instances, which means that any custom behaviour you have
-added for these methods will not be executed, including anything driven from the
-normal database object :doc:`signals </ref/signals>`.
+Note, however, that these bulk update methods cannot call the ``save()`` or
+``delete()`` methods of individual instances, which means that any custom
+behaviour you have added for these methods will not be executed, including
+anything driven from the normal database object :doc:`signals </ref/signals>`.
Use foreign key values directly
-------------------------------