mysql 如何添加索引来优化此查询?[关闭]

46scxncf  于 2023-04-28  发布在  Mysql
关注(0)|答案(1)|浏览(112)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

5天前关闭。
Improve this question
编辑:我发现了这篇关于索引的文章,它向我展示了我对键的许多假设是错误的:https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/
此问题可以关闭。
我有下面的查询,它使用了一个maintable,它有大约4000行,每个可维护的记录都有100个task子实体。
查询从maintable中提取记录,同时使用连接任务的target_date进行排序,该target_date是最接近今天的。
下面是该查询的简化版本:

SELECT <list of columns>,
MIN(t1_.target_date) AS min_td, 
DATEDIFF(CURRENT_DATE, MIN(t1_.target_date)) AS datediff_col
FROM maintable d0_ 
LEFT JOIN task t1_ ON d0_.id = t1_.dossier_id 
AND t1_.tasktype IN ('task1', 'task2') 
AND (t1_.status = 'Open') 
WHERE t1_.target_date IS NOT NULL 
AND t1_.target_date < ? 
GROUP BY d0_.id 
ORDER BY datediff_col DESC 
LIMIT 20

虽然上面有一个LIMIT 20,但它仍然会检查所有4000条记录来确定排序。
附件的图片是解释查询,我想知道这里是否有任何危险信号?我可以添加一个索引来加速它吗,或者它已经是它将要得到的最快的速度了?
它运行在MySQL 8上。

oxf4rvwz

oxf4rvwz1#

CREATE INDEX idx_task_dossier_id ON task (dossier_id);

CREATE INDEX idx_task_target_date_tasktype_status ON task (tasktype, status, target_date);

相关问题