Django ORM 查询太慢

Django ORM Query Too Slow

我使用这个数据库 table 超过 10000000 条数据。 enter image description here

并使用查询

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 秒) 我该如何解决这个问题?

另外,索引如下 enter image description here 这是用 django 制作的。

任何这些可能有助于提高速度。我不知道哪个最好,因为它取决于数据的分布。

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

每一个都是“覆盖”的,意味着查询可以完全在Index的BTree中进行;这会带来一些性能提升。

由于 dateuser 上的过滤,前两个中的一个可能会发光。第三种可能避免对 GROUP BY project 进行排序。 (ORDER BY的排序是不可避免的。)

三个都加; 运行它。还可以执行 EXPLAIN SELECT ... 以查看优化器决定哪个索引可能是最好的。

(以后请使用文字,不要使用图片。)