#25377: COUNT(*) not COUNT('*') ----------------------------------------------+-------------------- Reporter: adamchainz | Owner: nobody Type: Cleanup/optimization | Status: new Component: Database layer (models, ORM) | Version: 1.8 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 1 Easy pickings: 0 | UI/UX: 0 ----------------------------------------------+-------------------- Performance regression on 1.8 expression refactor. Count stopped outputting `COUNT(*)` and started outputting `COUNT('*')` due to using a `Value`. Possibly unnoticed until now because it doesn't affect the most popular database options much - I can't measure a performance drop for this on MySQL / InnoDb.
However I have managed to measure a performance drop on MariaDB + Aria (=MySQL fork + MyISAM fork): {{{ adamj@localhost [3]> select count(*) from count_test; +----------+ | count(*) | +----------+ | 10000 | +----------+ 1 row in set (0.00 sec) adamj@localhost [10]> select benchmark(100 * 1000 * 1000, (select count(*) from count_test)); +-----------------------------------------------------------------+ | benchmark(100 * 1000 * 1000, (select count(*) from count_test)) | +-----------------------------------------------------------------+ | 0 | +-----------------------------------------------------------------+ 1 row in set (0.86 sec) adamj@localhost [11]> select benchmark(100 * 1000 * 1000, (select count('*') from count_test)); +-------------------------------------------------------------------+ | benchmark(100 * 1000 * 1000, (select count('*') from count_test)) | +-------------------------------------------------------------------+ | 0 | +-------------------------------------------------------------------+ 1 row in set (1.23 sec) }}} This is because MyISAM / Aria store the count in a metadata variable but once you introduce the expression it figures it has to do a table scan. The situation would of course only get worse with more rows, 10000 is tiny. -- Ticket URL: <https://code.djangoproject.com/ticket/25377> 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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/053.e38d3e1d0fb4cef12e260d507426ef11%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.