From 1e7d320a93efda3f470641e9abefcb0e0733cd7a Mon Sep 17 00:00:00 2001 From: George Leslie-Waksman Date: Tue, 31 May 2022 00:01:13 -0700 Subject: [PATCH] Add an index to the timestamp column (#364) Many queries, including the default ordering, for the LogEntry model rely on the timestamp field. Adding an index will ensure reasonable scalability for large audit logs. --- CHANGELOG.md | 1 + .../0010_alter_logentry_timestamp.py | 20 +++++++++++++++++++ auditlog/models.py | 4 +++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 auditlog/migrations/0010_alter_logentry_timestamp.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 12b151c..5430345 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ #### Improvements +- feat: Add db_index to the `LogEntry.timestamp` column ([#364](https://github.com/jazzband/django-auditlog/pull/364)) - feat: Add register model from settings ([#368](https://github.com/jazzband/django-auditlog/pull/368)) - Context manager set_actor() for use in Celery tasks ([#262](https://github.com/jazzband/django-auditlog/pull/262)) diff --git a/auditlog/migrations/0010_alter_logentry_timestamp.py b/auditlog/migrations/0010_alter_logentry_timestamp.py new file mode 100644 index 0000000..261828b --- /dev/null +++ b/auditlog/migrations/0010_alter_logentry_timestamp.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.3 on 2022-03-11 23:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("auditlog", "0009_alter_logentry_additional_data"), + ] + + operations = [ + migrations.AlterField( + model_name="logentry", + name="timestamp", + field=models.DateTimeField( + auto_now_add=True, db_index=True, verbose_name="timestamp" + ), + ), + ] diff --git a/auditlog/models.py b/auditlog/models.py index 76d4e7b..612c4dd 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -220,7 +220,9 @@ class LogEntry(models.Model): remote_addr = models.GenericIPAddressField( blank=True, null=True, verbose_name=_("remote address") ) - timestamp = models.DateTimeField(auto_now_add=True, verbose_name=_("timestamp")) + timestamp = models.DateTimeField( + db_index=True, auto_now_add=True, verbose_name=_("timestamp") + ) additional_data = models.JSONField( blank=True, null=True, verbose_name=_("additional data") )