gpt4 book ai didi

mysql - 如何加快 MySQL 中缓慢的 SUM + ORDER BY + LIMIT 查询?

转载 作者:行者123 更新时间:2023-11-29 06:50:50 24 4
gpt4 key购买 nike

我有一个包含两个字段的简单键值表,创建方式如下:

 CREATE TABLE `mytable` (
`key` varchar(255) NOT NULL,
`value` double NOT NULL,
KEY `MYKEY` (`key`)
);

key 不是唯一的。该表包含超过一百万条记录。我需要一个查询来汇总给定键的所有值,并返回前 10 个键。这是我的尝试:

  SELECT t.key, SUM(t.value) value
FROM mytable t
GROUP BY t.key
ORDER BY value DESC
LIMIT 0, 10;

但这非常慢。事情是,没有 GROUP BY 和 SUM,它非常快,没有 ORDER BY,它非常快,但由于某种原因,两者的结合使它非常非常慢。谁能解释为什么会这样,以及如何加快速度?


没有值(value)指数。我尝试创建一个,但没有帮助。


EXPLAIN EXTENDED 在 Workbench 中生成以下内容:

 id select_type table type  possible_keys key   key_len ref  rows    filtered Extra 
1 SIMPLE t index NULL MYKEY 257 NULL 1340532 100.00 "Using temporary; Using filesort"

表中大约有 400K 个唯一键。


查询需要超过 3 分钟才能运行。我不知道过了多久,因为我在 3 分钟后停止了它。 但是,如果我删除键上的索引,它会在 30 秒内运行!有人知道为什么吗?

最佳答案

据我所知,真正加快速度的唯一方法是创建一个带有唯一键的单独表并维护总值。然后您将能够索引值以快速检索前十名,计算也已经完成。只要表格没有在太多地方更新,这应该不是主要问题。

这种查询的主要问题是 group by 需要按一个顺序进行索引,而 order by 需要按不同的顺序排序。

关于mysql - 如何加快 MySQL 中缓慢的 SUM + ORDER BY + LIMIT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529112/

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