相关疑难解决方法(0)

从巨大的表中删除大量数据

我有两张桌子.我们称之为KEY和VALUE.
KEY很小,约有1.000.000条记录.
VALUE很大,比如1.000.000.000记录.

在它们之间存在一个连接,使得每个KEY可能具有许多VALUES.它不是外键,但基本上是相同的含义.

DDL看起来像这样

create table KEY (
 key_id int,
 primary key (key_id)
);

create table VALUE (
 key_id int,
 value_id int,
 primary key (key_id, value_id)
);
Run Code Online (Sandbox Code Playgroud)

现在,我的问题.VALUE中大约一半的key_id已从KEY中删除,我需要以有序的方式删除它们,而两个表仍然处于高负荷状态.

这很容易做到

delete v 
  from VALUE v
  left join KEY k using (key_id)
 where k.key_id is null;
Run Code Online (Sandbox Code Playgroud)

但是,因为它不允许limit有多表删除我不喜欢这种方法.这样的删除需要几个小时才能运行,这使得无法限制删除.

另一种方法是创建游标以查找所有缺少的key_ids并逐个删除它们.这似乎非常缓慢,有点倒退.

还有其他选择吗?一些可以帮助的好技巧?

mysql

14
推荐指数
3
解决办法
2万
查看次数

单个更新查询所需的事务?

我在InnoDB表上有一个mysql查询,如下所示:

UPDATE items SET qty = qty + 5 WHERE item_id = 1234 LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我需要为此使用交易吗?不使用交易会发生什么不良事件吗?

mysql innodb transactions

10
推荐指数
1
解决办法
3770
查看次数

标签 统计

mysql ×2

innodb ×1

transactions ×1