【问题标题】:How can I speed up this SELECT query?如何加快这个 SELECT 查询?
【发布时间】:2017-12-23 04:08:49
【问题描述】:

我有一个像这样包含 user_id、时间、inHour 和 outHour 的表

我想与 user_id 分组并获得相关字段的最大时间。在下图中,您可以看到我想要的结果。

我的查询运行良好。但我想提高速度,因为它对大数据的运行速度很慢。这是我的查询:

SELECT
  foo.user_id,
  foo.time,
  foo.inHour,
  foo.outHour
FROM
(
    SELECT
        MAX(time) AS time,
        user_id
    FROM 
        foo
    GROUP BY user_id
) AS t1
INNER JOIN foo ON (t1.user_id = foo.user_id AND t1.time = foo.time);

我需要大幅减少查询时间。非常感谢任何帮助。

【问题讨论】:

  • 你的表是如何索引的?
  • 您是否在两个表中都为 user_id/time 创建了索引?
  • 只有一张桌子@Roy
  • 用每个用户的最大时间制作一个临时表(并在两个表中创建索引)
  • @Roy - 制作临时表只会让它变慢(在这种情况下)。

标签: mysql performance greatest-n-per-group


【解决方案1】:

分组最大值?

您将需要一个复合索引。您现有的查询将受益于

INDEX(user, time)  -- in this order!

我的博客提供了更快的技术:http://mysql.rjweb.org/doc.php/groupwise_max

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2017-01-12
    相关资源
    最近更新 更多