【问题标题】:Mysql MAX and GROUP BY very slowMysql MAX 和 GROUP BY 很慢
【发布时间】:2021-12-26 03:03:40
【问题描述】:

我试图弄清楚为什么我的查询使用 MAX、Where 和 GROUP by 非常慢。

表格大小:2246096 行

索引:

  • created_at_machine_id_idx(created_at,machine_id)

查询:

select
     MAX(id) AS id
    ,machine_id
FROM `table`
WHERE `table`.`machine_id` IN (30, 31, 43, 44, 46, 50, 51, 53, 55, 56...)
AND `created_at` <= '2021-11-14 07:45:00'
GROUP BY `machine_id`;

解释:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table range created_at_machine_id_idx created_at_machine_id_idx 13 NULL 1123048 Using where; Using index; Using temporary; Using filesort

现在需要 3 到 4 秒。我尝试了更多的索引组合,但没有任何运气。

基本上我想得到低于 2021-11-14 07:45:00 的每台机器的最后一个 id。

id 是主键。

【问题讨论】:

  • IN中有多少个machine_id?

标签: mysql performance query-optimization


【解决方案1】:

我希望这有助于它运行得更快:

INDEX(machine_id, created_at, id)

【讨论】:

  • @radu paraleste 你的表现提高了吗?
  • 大家好。对不起,我出城几天了。很不幸的是,不行。但我发现了另一个解决我的问题的stackoverflow问题。这个:stackoverflow.com/questions/21439342/…。谢谢
  • @raduparaleste - 其他 SO 查询与您的不同。请说明哪些索引工作者最适合您的查询。使用EXPLAIN SELECT 发现它。你有没有像他们一样使用“自我加入”?此外,要使用他们的查询,您必须假设 id 的顺序为created_at。虽然这可能是真的,但不一定是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多