Django ORM Query Too Slow

Я использую эту таблицу базы данных с более чем 10000000 данных. введите описание изображения здесь

Используйте запрос

SELECT mytable.project, COUNT(*) AS `total`  
FROM mytable   
WHERE (`mytable`.`date` >= '2022-04-05' AND NOT (`mytable`.`user` = 'sw_int'))   
GROUP BY `mytable`.`project`
ORDER BY `total`

Но это занимает слишком много времени, несмотря на использование индексов. (около 20 секунд). Как я могу решить эту проблему?

Дополнительно, индекс выглядит следующим образом Введите здесь описание изображения. Это сделано с помощью django.

Любой из них может несколько повысить скорость. Я не могу сказать, что будет лучше, поскольку это зависит от распределения данных.

INDEX(date, user, project)
INDEX(user, project, date)
INDEX(project, date, user)

Each является "покрывающим", что означает, что запрос может быть выполнен полностью в BTree индекса; это дает некоторый прирост производительности.

Один из первых двух может светиться благодаря фильтрации на date или user. Третий может избежать сортировки для GROUP BY project. (Сортировка для ORDER BY неизбежна.)

Добавьте все три; запустите его. Также выполните EXPLAIN SELECT ..., чтобы увидеть, какой индекс, по мнению оптимизатора, будет лучшим.

(В будущем, пожалуйста, включайте текст, а не изображения.)

Вернуться на верх