我有这个查询:
SELECT p.id, r.status, r.title
FROM page AS p
INNER JOIN page_revision as r ON r.pageId = p.id AND (
r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId AND r2.status = 'active')
OR r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId)
)
它返回每个页面和每个页面的最新活动修订,除非没有可用的活动修订,在这种情况下,它只返回最新修订。
有什么办法可以优化它以提高性能或只是一般的可读性?我现在没有任何问题,但我担心的是,当它进入生产环境(可能有很多页面)时,它的性能会很差。
另外,有什么明显的问题我应该注意的吗?子查询的使用总是困扰着我,但据我所知,没有它们就无法做到这一点。
注意:
条件在 JOIN 而不是 WHERE 子句中的原因是在其他查询中(使用相同的逻辑)我从“site”表到“page”表,如果没有页面存在我仍然希望网站返回。
杰克
编辑:我正在使用 MySQL