From 05b034ddf46d7e4b16c32cd6a5c1ba7afb351d26 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Thu, 8 Apr 2021 21:23:10 +0200 Subject: [PATCH] Add some (convering) indexes to speed up database queries --- .../apps/chronos/migrations/0005_indexes.py | 59 +++++++++++++++++++ aleksis/apps/chronos/models.py | 21 ++++++- 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 aleksis/apps/chronos/migrations/0005_indexes.py diff --git a/aleksis/apps/chronos/migrations/0005_indexes.py b/aleksis/apps/chronos/migrations/0005_indexes.py new file mode 100644 index 00000000..a00fefca --- /dev/null +++ b/aleksis/apps/chronos/migrations/0005_indexes.py @@ -0,0 +1,59 @@ +# Generated by Django 3.2 on 2021-04-08 19:12 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0010_external_link_widget'), + ('chronos', '0004_substitution_extra_lesson_year'), + ] + + operations = [ + migrations.AlterModelOptions( + name='chronosglobalpermissions', + options={'managed': False, 'permissions': (('view_all_timetables', 'Can view all timetables'), ('view_timetable_overview', 'Can view timetable overview'), ('view_lessons_day', 'Can view all lessons per day'))}, + ), + migrations.AlterModelOptions( + name='lessonsubstitution', + options={'ordering': ['year', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period'], 'verbose_name': 'Lesson substitution', 'verbose_name_plural': 'Lesson substitutions'}, + ), + migrations.RemoveIndex( + model_name='event', + name='chronos_eve_period__c7ec33_idx', + ), + migrations.RemoveIndex( + model_name='lessonperiod', + name='chronos_les_lesson__05250e_idx', + ), + migrations.AddIndex( + model_name='event', + index=models.Index(fields=['date_start', 'date_end'], include=('period_from', 'period_to'), name='event_date_start_date_end'), + ), + migrations.AddIndex( + model_name='extralesson', + index=models.Index(fields=['week', 'year'], name='extra_lesson_week_year'), + ), + migrations.AddIndex( + model_name='lessonperiod', + index=models.Index(fields=['lesson', 'period'], name='lesson_period_lesson_period'), + ), + migrations.AddIndex( + model_name='lessonperiod', + index=models.Index(fields=['room'], include=('lesson', 'period'), name='lesson_period_room'), + ), + migrations.AddIndex( + model_name='lessonsubstitution', + index=models.Index(fields=['week', 'year'], name='substitution_week_year'), + ), + migrations.AddIndex( + model_name='lessonsubstitution', + index=models.Index(fields=['lesson_period'], name='substitution_lesson_period'), + ), + migrations.AddIndex( + model_name='validityrange', + index=models.Index(fields=['date_start', 'date_end'], name='validity_date_start_date_end'), + ), + ] diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 209155a4..9aaf8227 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -117,6 +117,9 @@ class ValidityRange(ExtensibleModel): verbose_name = _("Validity range") verbose_name_plural = _("Validity ranges") unique_together = ["date_start", "date_end"] + indexes = [ + models.Index(fields=["date_start", "date_end"], name="validity_date_start_date_end") + ] class TimePeriod(ValidityRangeRelatedExtensibleModel): @@ -425,6 +428,10 @@ class LessonSubstitution(ExtensibleModel, TeacherPropertiesMixin, WeekRelatedMix name="either_substituted_or_cancelled", ) ] + indexes = [ + models.Index(fields=["week", "year"], name="substitution_week_year"), + models.Index(fields=["lesson_period"], name="substitution_lesson_period"), + ] verbose_name = _("Lesson substitution") verbose_name_plural = _("Lesson substitutions") @@ -531,7 +538,10 @@ class LessonPeriod(WeekAnnotationMixin, TeacherPropertiesMixin, ExtensibleModel) "period__period", "lesson__subject", ] - indexes = [models.Index(fields=["lesson", "period"])] + indexes = [ + models.Index(fields=["lesson", "period"], name="lesson_period_lesson_period"), + models.Index(fields=["room"], include=["lesson", "period"], name="lesson_period_room"), + ] verbose_name = _("Lesson period") verbose_name_plural = _("Lesson periods") @@ -992,7 +1002,13 @@ class Event(SchoolTermRelatedExtensibleModel, GroupPropertiesMixin, TeacherPrope class Meta: ordering = ["date_start"] - indexes = [models.Index(fields=["period_from", "period_to", "date_start", "date_end"])] + indexes = [ + models.Index( + fields=["date_start", "date_end"], + include=["period_from", "period_to"], + name="event_date_start_date_end", + ) + ] verbose_name = _("Event") verbose_name_plural = _("Events") @@ -1046,6 +1062,7 @@ class ExtraLesson( class Meta: verbose_name = _("Extra lesson") verbose_name_plural = _("Extra lessons") + indexes = [models.Index(fields=["week", "year"], name="extra_lesson_week_year")] class ChronosGlobalPermissions(GlobalPermissionModel): -- GitLab