#30207: Optimise paginator for tables with massive records
-------------------------------------+-------------------------------------
Reporter: M. Javidan Darugar | Owner: M.
Type: | Javidan Darugar
Cleanup/optimization | Status: assigned
Component: Core (Other) | Version: master
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Nikolas):
1. i too use paginator hack for admin, work for Postgres only if not use
any filters, this is can be inbox good optimization
{{{
class LargeTablePaginator(Paginator):
"""
Warning: Postgresql only hack
Overrides the count method of QuerySet objects to get an estimate
instead of actual count when not filtered.
However, this estimate can be stale and hence not fit for situations
where the count of objects actually matter.
"""
def _get_count(self):
if getattr(self, '_count', None) is not None:
return self._count
query = self.object_list.query
if not query.where:
try:
cursor = connection.cursor()
cursor.execute("SELECT reltuples FROM pg_class WHERE
relname = %s",
[query.model._meta.db_table])
self._count = int(cursor.fetchone()[0])
except:
self._count = super(LargeTablePaginator,
self)._get_count()
else:
self._count = super(LargeTablePaginator, self)._get_count()
return self._count
count = property(_get_count)
}}}
maximum speed on any sized table
2. if use only pk order query can serios optimize when have max pk and
wont get page-1, in this case just need select ..... where pk<last_max_id.
In this case will be use index and have maximum speed
--
Ticket URL: <https://code.djangoproject.com/ticket/30207#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.3888cfbbccec99ff0e5c5fb63ee9bb5d%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.