mysql - 非常慢的 MySQL 删除
问题描述
所以我试图从一个相当大的mysql(innodb)表中删除一些行。
我尝试使用的查询如下:
delete from item where id in (select id from items_to_be_deleted);
item
是一个 70'000'000 行的表,并且items_to_be_deleted
是一个 1'000'000 行的表。
我的查询似乎永远不会完成,即使我添加了一个非常小的限制。(delete from item where id in (select id from items_to_be_deleted) LIMIT 10;
如果我运行select id from items_to_be_deleted
它几乎立即返回,它只是一个带有主键(id)和另一个 varchar 字段的表。
我的查询有什么问题,它需要这么长时间/似乎永远不会完成?
解决方案
IN 子句作为 OR 子句的迭代,因此您可以使用基于用于 IN 子句的相同子查询的内部联接来避免这种情况
delete item
from item
inner join (
select id
from items_to_be_deleted
) t on t.id = item.id
推荐阅读
- firebase - 如何将 Dart Aqueduct API 与 Google Firestore 连接?
- css - 在 jsx 和 scss 中为必填字段添加星号
- regex - JSX 文件中的正则表达式不起作用,试图删除在名称周围返回的引号“”
- java - 在 Spring Boot 中处理无效的 PathVariables
- google-cloud-platform - 如何在 Google Cloud Platform 中找到 MerchantsCenter 创建的存储桶
- python - 在 Z3py 中使用多字节字符作为函数和排序名称
- javascript - timepicker.js - 在某些情况下时间选择器位置错误
- schema - 总价和每单位微数据的价格
- java - Jenkins kubernetes 插件:提供的端口:50000 不可访问
- git - git - 重置提交次数