我使用這個包含超過 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 制作的。
uj5u.com熱心網友回復:
這些中的任何一個都可能有助于加快速度。我不知道哪個是最好的,因為它取決于資料的分布。
INDEX(date, user, project)
INDEX(user, project, date)
INDEX(project, date, user)
每個都是“覆寫”,意思是查詢可以完全在Index的BTree中進行;這提供了一些性能提升。
由于在date或上過濾,前兩個中的一個可能會發光user。第三個可能避免排序為GROUP BY project. (for 的排序ORDER BY是不可避免的。)
添加所有三個;運行。還要EXPLAIN SELECT ...看看優化器決定的哪個索引可能是最好的。
(將來,請包括文字,而不是影像。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459266.html
