gpt4 book ai didi

SQL查询性能问题(多子查询)

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:07 24 4
gpt4 key购买 nike

我有这个问题:

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 子句中的原因是在其他查询中(使用相同的逻辑)我从“站点”表到“页面”表的 LEFT JOINing,如果不存在页面我仍然希望网站返回。

jack

编辑:我正在使用 MySQL

最佳答案

如果“active”是按字母顺序排列的第一个,您可以将子查询减少到:

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 r2.id
FROM page_revision as r2
WHERE r2.pageId = r.pageId
ORDER BY r2.status, r2.id DESC
LIMIT 1)

否则,您可以将 ORDER BY 行替换为

ORDER BY CASE r2.status WHEN 'active' THEN 0 ELSE 1 END, r2.id DESC

这些都是我对 SQL Server 的假设,您对 MySQL 的使用情况可能会有所不同。

关于SQL查询性能问题(多子查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com