已关闭,此问题需要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上。
1条答案
按热度按时间oxf4rvwz1#