Настройка базы данных для 1 миллиона записей

У меня есть таблица, содержащая 1 миллион записей.

И я показываю данные вот так, просто показываю данные с ListView и pagenation

from django.views.generic import ListView
class ListSearchView(ListView):
    paginate_by = 10
    form_class = None
    form = None
    ordering = "-created_at"
    sort_headers = None

    def get_initial(self):
        return self.request.GET.copy()

    def get_form(self):
        return self.form_class(self.get_initial())

    def get_ordering(self):
        return self.request.GET.get("sort_by", self.ordering)

    def get_context_data(self, **kwargs):

        form = self.get_form()
        params = querydict_to_dict(self.request.GET.copy())
        search_params = {k: v for k, v in params.items()
                         if k != 'page' and k != 'sort_by'}
        query = {k: v for k, v in params.items() if k != 'page'}

        kwargs.update({
            'form': form,
            'search_params': url_encode_params(search_params),
            'query': url_encode_params(query),
            'sort_by': query.get('sort_by', self.ordering),
            'sort_headers': self.sort_headers
        })
        return super(ListSearchView, self).get_context_data(**kwargs)

    def get_queryset(self):
        queryset = super().get_queryset()
        self.form = self.get_form()
        if self.form.is_valid():
            created_date = self.form.cleaned_data.get('created_date')
            if created_date:
                start, end = created_date.split(DATE_RANGE_SEPARATOR)
                start_date = datetime.strptime(start, DATE_RANGE_FORMAT)
                end_date = datetime.strptime(end, DATE_RANGE_FORMAT)

                queryset = queryset.filter(
                    created_at__gte=start_date.astimezone(pytz.UTC),
                    created_at__lt=end_date.astimezone(pytz.UTC)
                )

            status = self.form.cleaned_data.get('status', [])
            status = [s for s in status if s != '']
            if status:
                queryset = queryset.filter(
                    status__in=status
                )
        return queryset

class MessageListView(LoginRequiredMixin, ListSearchView):
    template_name = "message/index.html"
    model = Message
    def get(self, request, *args, **kwargs):
        return super(MessageLogView, self).get(request, *args, **kwargs)

Сейчас время загрузки составляет более 2~3 с, я бы хотел ускорить этот процесс.

Что мне делать?

[пробный]

добавили индекс к id, однако это не помогло.

ALTER TABLE `message` ADD INDEX(`id`);
Вернуться на верх