From 3b56d2c22b448238f5a2fc38cb3d2c85c0d9e5ba Mon Sep 17 00:00:00 2001 From: imperosol Date: Fri, 7 Nov 2025 13:05:55 +0100 Subject: [PATCH] add index on `Selling.date` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'index prend ~20% de la taille de la table (la table fait un peu plus de 100%Mo, et l'index un peu plus de 20Mo), mais permet de diviser par 10 les requêtes qui filtrent sur la date des ventes. Ca concerne notamment les requêtes db faites sur les pages suivantes : - les appels à facture (~75ms → ~3ms) - les ventes d'un club (entre 300ms et 450ms → entre 10ms et 15ms) - le top conso des comptoirs (sur le Foyer, ~90ms → ~9ms) - les dernières opérations d'un comptoir (sur le Foyer, ~130ms → ~1.5ms J'aurais bien aimé mettre également un index sur la troncature au mois de la date, mais c'est compliqué à mettre en place étant donné que postgres ne prend des index que sur des expressions immuables et que, comme elle dépend de la timezone (qui peut changer), la fonction date_trunc n'est pas immuable. --- ...4_alter_selling_date_selling_date_month_idx.py | 15 +++++++++++++++ counter/models.py | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 counter/migrations/0034_alter_selling_date_selling_date_month_idx.py diff --git a/counter/migrations/0034_alter_selling_date_selling_date_month_idx.py b/counter/migrations/0034_alter_selling_date_selling_date_month_idx.py new file mode 100644 index 00000000..719b62de --- /dev/null +++ b/counter/migrations/0034_alter_selling_date_selling_date_month_idx.py @@ -0,0 +1,15 @@ +# Generated by Django 5.2.3 on 2025-11-05 08:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [("counter", "0033_invoicecall")] + + operations = [ + migrations.AlterField( + model_name="selling", + name="date", + field=models.DateTimeField(db_index=True, verbose_name="date"), + ), + ] diff --git a/counter/models.py b/counter/models.py index e08e3905..1e92612b 100644 --- a/counter/models.py +++ b/counter/models.py @@ -849,7 +849,7 @@ class Selling(models.Model): blank=False, on_delete=models.SET_NULL, ) - date = models.DateTimeField(_("date")) + date = models.DateTimeField(_("date"), db_index=True) payment_method = models.CharField( _("payment method"), max_length=255,