我一直试图删除我的 MySQL 数据库上的一些信息。
我从来没有用过这么大的数据库,当我开发这个应用程序时,我没想到它会变得这么大(对你们来说可能很小,但对我来说它很大)。
我的想法是:
moid
)的表(图 1)periodid
)(图 1)periodid
, moid
)连接起来的表(图 1)我有 200 个使用moperiodid
as FK 的表(表的数量根据用户输入而变化)(图 2)
然后,当我想清理“历史数据”时,我只需从 MO 或 PERIOD 中删除级联。
我就是这么想的,但在我的现实世界中,情况并不好。
对于 Selects 和 Inserts 一切正常,但是我第一次想开始清理数据时,主要想法是只保留最后 X 天(也根据用户输入进行配置)。
我每天有 3094555 个新的 moperiods,即使只删除一个也不起作用:
0 13 22:46:19 delete from parser_customer_period_mo where id = 1 Error Code: 1205. Lock wait timeout exceeded; try restarting transaction 51.169 sec
Run Code Online (Sandbox Code Playgroud)
每次尝试后,InnoDB 每秒写入/读取数会疯狂 1 小时。(图 3)
我不知道如何删除旧信息,这是一个小系统,我正在构建30个系统中的第二个,第二个将有12倍的数据量。
图 1:
图 2:
图 …