【问题标题】:Simplify a mysql query please请简化一个mysql查询
【发布时间】:2023-03-29 19:45:02
【问题描述】:

我有一个 MySQL 查询:

SELECT p.* FROM posts p
WHERE 
(
    p.userid in 
    (
        select blogid from abos where userid=11
    )
    OR p.userid = 11
) 
AND NOT EXISTS
(
    SELECT null FROM posts_denied r 
    WHERE r.post_id = p.id AND r.userid = 11
)
order by p.id DESC limit 5

我想删除“where in”子句...请问如何找到性能最佳的查询语法?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT DISTINCT p.*
    FROM posts p
    JOIN abos a
    ON p.userid = a.blogid OR p.userid = 11
    LEFT JOIN posts_denied r
    ON r.post_id = p.id AND r.userid = 11
    WHERE (a.userid = 11 OR p.userid = 11)
      AND r.post_id IS NULL
    ORDER BY p.id DESC
    LIMIT 5
    

    【讨论】:

    • 谢谢史蒂夫。是表演的“不同”条款吗?桌子会很大……
    • DISTINCT 以防JOINs 出现多个匹配项-使用EXISTSNOT EXISTS 不会遇到此问题。
    • 这不可能用不存在或存在来构建它?会有更好的表现吗?
    • 不确定性能会如何比较——你能同时试试看吗?
    • 不幸的是,表格还没有填满:-( 有没有可以模拟的在线工具?...
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多