gpt4 book ai didi

mysql - 我还能做些什么来优化这个查询?

转载 作者:行者123 更新时间:2023-11-29 01:41:37 25 4
gpt4 key购买 nike

场景:包含 1.5 - 200 万条记录的表

我需要执行一个删除旧记录的查询,条件中唯一使用的字段是日期。我已经为该字段添加了索引。

问题:查询执行时间过长(超过 14 分钟)。

这是我目前所做的

mysql> create index idx_logs_log_date ON logs (log_date);
Query OK, 0 rows affected (9.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> EXPLAIN SELECT * from logs where log_date < "2013-09-11";
| id | select_type | table | type | possible_keys | key | key_len | ref | row |Extra

+----+-------------+-------+------+-------------------+------+---------+------+-----+-----

| 1 | SIMPLE | logs | ALL | idx_logs_log_date | NULL | NULL | NULL | 1420480 | Using where |


1 row in set (0.00 sec)



mysql> delete from logs where log_date < "2013-09-11";

Query OK, 1163008 rows affected (14 min 20.87 sec)

我也尝试删除该索引并向该字段添加一个键(这当然会创建一个新索引),但响应时间没有任何改善。

那么,我的问题是,对于如何改进响应时间,您还有其他想法吗?

编辑:

mysql> SELECT COUNT(id) FROM logs WHERE log_date < "2013-09-14";
+-----------+
| COUNT(id) |
+-----------+
| 1182688 |
+-----------+
1 row in set (0.58 sec)

最佳答案

很可能不是过滤器慢,而是行的删除(通过测量执行 SELECT COUNT(id) FROM logs WHERE log_date < "2013-09-14" 需要多长时间来测试)。

要加快速度,您需要调整一些服务器设置。但是,如果您只是简单地保留最近 X 时刻的基于时间的日志,那么您可能想要查看基于日期的分区,这样您就可以在不再需要它时删除该表。

关于mysql - 我还能做些什么来优化这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921282/

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