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
我的问题是,当我执行此查询时,它的执行速度像2sec +一样慢,但是数据仅为9,如何加快查询的执行速度?
答案 0 :(得分:0)
查看您的EXPLAIN结果。注意,在查询documentlog
表时MySQL不使用任何类型的键,即documentlog
表上没有定义键。此时,您的查询中已处理了超过200万条记录。这可能是查询缓慢的最可能原因。
在docid
表的logid
和documentlog
字段上添加索引,并检查它是否可以缩短查询的执行时间。
更新!
更新后的EXPLAIN
查询的输出表示它正在使用全表扫描!(即type=ALL
)来生成主外部的输出。查询。为什么?这是由于在Where
子句中使用的属性(即{department
和end
)上没有定义索引这一事实引起的。
通常,如果要加快查询速度,则必须确保为查询的WHERE
条件中使用的属性定义了适当的索引。
顺便说一句,您可以通过阅读MySQL的documentation来进一步了解MySQL的EXPLAIN结果的含义。