gpt4 book ai didi

MySQL 同时对同一个表执行 2 个查询

转载 作者:可可西里 更新时间:2023-11-01 07:37:30 26 4
gpt4 key购买 nike

新值全天添加到 MySQL 数据库中。该表中有超过 800 万行。因为有很多旧值,所以我想在不停止插入值的 Java 程序的情况下清理这些值。

我正在向 MySQL 发送此查询:

DELETE FROM `tablename`
WHERE `from` <= (date_add(now(), interval -20 DAY))

但是发生的是 Java 程序停止向表中添加新值。有什么办法可以在不编辑 Java 程序的情况下处理这个问题吗?我愿意每天将查询作为 cronjob 运行一次。

我也尝试过使用参数 LOW_PRIORITY,但没有任何区别。

最佳答案

看来您使用的是旧的 MyISAM 数据库引擎。

不幸的是,MyISAM 使用表级锁定。当插入、更新或删除一行时,对该表的所有其他更改都将保留,直到该请求完成。在您的情况下,长时间运行 DELETE 会阻止任何 INSERT 到该表中。

您可以通过将表引擎更改为 InnoDB 来改进它,如下所示:

ALTER TABLE mytable ENGINE = innodb;

InnoDB 引擎是完全事务性的,在 INSERTUPDATEDELETE 期间不会锁定整个表,因此您的问题应该会消失。

关于MySQL 同时对同一个表执行 2 个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327516/

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