[英]INNER JOIN with subquery with max and where clause in mysql
SELECT a.ts, b.barcodenumber, a.remarks, c.department
FROM documentlog a
INNER JOIN (select docid, max(logid) as logid from documentlog GROUP BY docid) d ON d.docid=a.docid AND d.logid=a.logid
INNER JOIN user c ON c.uid=a.user
INNER JOIN document b ON b.id=a.docid
WHERE c.department = 'PTO' AND b.end = 0
我的问题是,当我执行此查询时,它的执行速度像2秒以上,但数据仅为9秒,如何才能加快查询的执行速度?
查看您的EXPLAIN结果。 注意,在查询documentlog
日志表时,MySQL不使用任何类型的键,即documentlog
日志表上没有定义键。 此时,您的查询中已处理了超过200万条记录。 这可能是查询缓慢的最可能原因。
在documentlog
表的docid
和logid
字段上添加索引,并检查它是否可以缩短查询的执行时间。
更新!!
更新的EXPLAIN
查询的输出表明它正在使用全表扫描! (即type=ALL
)生成主要外部查询的输出。 为什么? 这是由于在Where
子句中使用的属性(即( department
和end
)上没有定义索引)引起的。
通常,如果要加快查询速度,则必须确保为查询的WHERE
条件中使用的属性定义了适当的索引。
顺便说一句,您可以通过阅读MySQL 文档了解有关MySQL EXPLAIN结果含义的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.