【发布时间】:2011-11-25 07:21:39
【问题描述】:
我有一个我正在设计的应用程序的查询。有一个参考表、一个作者表和一个reference_authors 表。有一个子查询返回给定参考的所有作者,然后我以 php 格式显示。子查询和查询单独运行既好又快。但是,一旦将子查询放入主查询中,整个事情就会花费 120 多秒的时间来运行。我会对此有一些新的看法。 谢谢。
SELECT
rf.reference_id,
rf.reference_type_id,
rf.article_title,
rf.publication,
rf.annotation,
rf.publication_year,
(SELECT GROUP_CONCAT(a.author_name)
FROM authors_final AS a
INNER JOIN reference_authors AS ra2 ON ra2.author_id = a.author_id
WHERE ra2.reference_id = rf.reference_id
GROUP BY ra2.reference_id) AS authors
FROM
references_final AS rf
INNER JOIN reference_authors AS ra ON rf.reference_id = ra.reference_id
LEFT JOIN reference_institutes AS ri ON rf.reference_id = ri.reference_id;
这是固定查询。谢谢大家的推荐。
SELECT
rf.reference_id,
rf.reference_type_id,
rf.article_title,
rf.publication,
rf.annotation,
rf.publication_year,
GROUP_CONCAT(a.author_name) AS authors
FROM
references_final as rf
INNER JOIN (reference_authors AS ra INNER JOIN authors_final AS a ON ra.author_id = a.author_id)
ON rf.reference_id = ra.reference_id
LEFT JOIN reference_institutes AS ri ON rf.reference_id = ri.reference_id
GROUP BY rf.reference_id
【问题讨论】:
-
您是否尝试将子查询重写为内部连接?
-
我知道我错过了什么,我知道。只是看看你推荐的 catcall 并将子查询重写为内部连接,查询现在需要 0.078 秒。感谢一百万的伙伴。
标签: mysql database optimization query-optimization subquery