【发布时间】:2010-10-08 07:52:51
【问题描述】:
我有这个问题:
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 子句中的原因是在其他查询中(使用相同的逻辑)我从“站点”表到“页面”表的左连接,如果不存在页面我仍然希望网站返回。
杰克
编辑:我正在使用 MySQL
【问题讨论】:
-
表 page_revision 和 page 上有哪些索引?
-
页面:id,siteId。 page_revision: id, pageId
标签: sql mysql performance join subquery