下面的 MySQL 查询为什么这么慢?
我已尝试向 DocumentRevision.document 和 Document.status 添加索引,但执行查询通常需要很长时间(似乎如果按顺序进行此查询,查询速度会加快)。是否有另一种更有效的方法来实现相同的结果?该查询获取数据库中所有可用文档的所有最新修订版。有两张 table 。文档和文档修订。文档表仅包含 id 和状态字段,而 DocumentRevision 包含所有数据以及“文档”id 字段,以便它知道它是哪个文档的修订版。
SELECT rev.document as documentId, rev.id as revId, rev.name as name,
rev.dateCreated as dateCreated, rev.documentOrder as documentOrder
FROM (
SELECT Document.id as docId, MAX(DocumentRevision.id) as maxRevId
FROM Document, DocumentRevision
WHERE Document.id = DocumentRevision.document AND Document.status = 0
GROUP BY Document.id
) AS x
INNER JOIN DocumentRevision as rev on rev.document = x.docId
AND rev.id = x.maxRevId
ORDER BY dateCreated DESC;
最佳答案
你有两个选择:
SELECT dr.*
FROM (
SELECT document, MAX(id) AS maxid
FROM documentRevision
GROUP BY
document
) drd
JOIN documentRevision dr
ON dr.id = drd.maxid
JOIN document d
ON (d.id, d.status) = (drd.document, 0)
和
SELECT dr.*
FROM document d
JOIN documentRevision dr
ON dr.id =
(
SELECT id
FROM documentRevision dri
WHERE dri.document = d.id
ORDER BY
document DESC, id DESC
LIMIT 1
)
第一个很可能是最有效的,除非您对每个文档有很多修订。
在 documentRevision (document, id)
上创建复合索引(按此顺序)以便查询快速运行。
关于mysql - 优化缓慢的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14354060/