【发布时间】:2021-05-21 20:00:13
【问题描述】:
我有一个大约 700GB 的数据库表,其中有 1 Billion 行,数据大约是 500GB,索引是 200GB,
我正在尝试删除 2021 年之前的所有数据,
2021 年大约有 298,970,576 行,还有 708,337,583 行剩余。
要删除它,我在我的 python shell 中运行一个不间断的查询
DELETE FROM table_name WHERE id < 1762163840 LIMIT 1000000;
id -> 1762163840 代表 2021 年的数据。删除 100 万行大约需要 1200-1800 秒。
有什么办法可以加快这个速度,因为目前的方式已经运行了 15 天以上,到目前为止没有太多的数据删除,而且会做更多的天。
我想如果我只用我要删除的所有记录的 id 制作一个表,然后做一个精确的映射,比如
DELETE FROM table_name WHERE id IN (SELECT id FROM _tmp_table_name);
会很快吗?会比先用所有记录新建一个表然后删除它更快吗?
数据库在 RDS 上设置,实例类为 db.r3.large 2 vCPU 和 15.25 GB RAM,仅运行 4-5 个连接。
【问题讨论】:
标签: mysql sql performance sql-delete