【问题标题】:Mysql subquery very slowMysql子查询很慢
【发布时间】:2013-02-13 09:47:47
【问题描述】:

我有这个 MySQL 问题。它工作正常,但速度极慢。运行最多需要 30 秒。

SELECT t.Id, Subject, k.info
FROM tip t
LEFT JOIN comments k ON t.Id = k.Tipid
WHERE event = 1
AND k.Id
IN (
SELECT Max(Id) FROM comments GROUP BY Tipid
)

如果我只运行子查询 (SELECT Max(Id) FROM comments GROUP BY Tipid),运行大约需要 0.02 秒。

子查询有问题。你有什么想法吗?

【问题讨论】:

  • 在询问有关查询性能的问题时,请尝试包含有关您正在使用的表的一些详细信息,例如表中的行,索引。还可以尝试在开头使用单词EXPLAIN 运行您的查询,以生成执行计划跟踪并将其发布,因为它非常有帮助。

标签: mysql sql subquery


【解决方案1】:

如果你选择 max(id) 就不需要 group by 试试这个

    SELECT t.Id, Subject, k.info
    FROM tip t
    LEFT JOIN comments k ON t.Id = k.Tipid
    WHERE event = 1
    AND k.Id in (select Max(Id) from comments)

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT t.Id, t.Subject, c.info
    FROM tip t
    LEFT JOIN
    (
       SELECT Tipid, MAX(Id) AS MaxId
       FROM comments 
       GROUP BY Tipid
    ) AS c  ON t.Id = c.Tipid
           AND t.Id = c.MaxId
    WHERE t.event = 1;
    

    【讨论】:

      【解决方案3】:

      这有很多原因... 我想你试试这个...

      SELECT t.Id, Subject, k.info
      FROM tip t
      INNER JOIN comments k ON t.Id = k.Tipid
      WHERE event = 1
        AND k.Id IN ( SELECT Max(Id) FROM comments GROUP BY Tipid )
      

      因为 LEFT JOIN 在 50 条记录后变得太慢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 2014-04-30
        • 2014-09-17
        • 2013-08-14
        • 2014-08-02
        • 2018-09-07
        相关资源
        最近更新 更多