次の MySQL クエリで非常に遅いのは何ですか?
DocumentRevision.document と Document.status にインデックスを追加しようとしましたが、通常はクエリの実行に永遠に時間がかかります (このクエリを順番に実行すると、クエリが高速化されるようです)。同じ結果を達成するための別のより効率的な方法はありますか? クエリは、データベースで利用可能なすべてのドキュメントのすべての最新リビジョンを取得します。2 つのテーブルがあります。Document および DocumentRevision。Document テーブルには id フィールドと status フィールドだけが含まれますが、DocumentRevision にはすべてのデータと "document" 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;