gpt4 book ai didi

mysql - 缓慢的 MySQL 查询

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

嘿,我有一个非常慢的 MySQL 查询。我确定我需要做的就是添加正确的索引,但我尝试的所有方法都不起作用。

查询是:

SELECT DATE(DateTime) as 'SpeedDate', avg(LoadTime) as 'LoadTime'
FROM SpeedMonitor
GROUP BY Date(DateTime);

查询的解释是:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1 SIMPLE SpeedMonitor ALL 7259978 Using temporary; Using filesort

表结构为:

CREATE TABLE `SpeedMonitor` (
`SMID` int(10) unsigned NOT NULL auto_increment,
`DateTime` datetime NOT NULL,
`LoadTime` double unsigned NOT NULL,
PRIMARY KEY (`SMID`)
) ENGINE=InnoDB AUTO_INCREMENT=7258294 DEFAULT CHARSET=latin1;

如有任何帮助,我们将不胜感激。

最佳答案

您只是在查询中请求两列,因此索引可以/应该放在那儿:

  • 日期时间
  • 加载时间

另一种加快查询速度的方法是将 DateTime 字段一分为二:日期和时间。
这样 db 可以直接在日期字段上分组而不是计算 DATE(...)。

已编辑:
如果您更喜欢使用触发器,请创建一个新列 (DATE) 并将其命名为 newdate,然后尝试这样做(我现在无法尝试查看它是否正确):

CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
FOR EACH ROW
BEGIN
SET NEW.newdate=DATE(NEW.DateTime);
END

再次编辑:
我刚刚创建了一个数据库,其中包含大约 900,000 条记录的同一个表 speedmonitor。
然后我运行查询 SELECT newdate,AVG(LoadTime) loadtime FROM speedmonitor GROUP BY newdate,它花了大约 100 秒!!
删除 newdate 字段上的索引(并使用 RESET QUERY CACHEFLUSH TABLES 清除缓存),同样的查询用了 0.6 秒!!!
仅供比较:查询 SELECT DATE(DateTime),AVG(LoadTime) loadtime FROM speedmonitor GROUP BY DATE(DateTime) 花费了 0.9s。
所以我认为 newdate 上的索引不好:删除它。
我现在要添加尽可能多的记录并再次测试两个查询。

最终编辑:
删除 newdate 和 DateTime 列上的索引,在 speedmonitor 表上有 800 万条记录,结果如下:

  • 在新日期列上进行选择和分组:7.5s
  • 在 DATE(DateTime) 字段上选择和分组:13.7s

我认为这是一个很好的加速。
在 mysql 命令提示符下执行查询需要时间。

关于mysql - 缓慢的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642880/

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