小编Dio*_*aim的帖子

删除数据的问题

我一直试图删除我的 MySQL 数据库上的一些信息。

我从来没有用过这么大的数据库,当我开发这个应用程序时,我没想到它会变得这么大(对你们来说可能很小,但对我来说它很大)。

我的想法是:

  • 我有一张带有“mos”托管对象(PK moid)的表(图 1)
  • 我有一张带有“句号”的表格(PK periodid)(图 1)
  • 我有一个将“Period”与 MO(PK moperiodid, FKs periodid, moid)连接起来的表(图 1)
  • 我有 200 个使用moperiodidas 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:

200 表模式

图 …

mysql foreign-key delete

6
推荐指数
1
解决办法
630
查看次数

标签 统计

delete ×1

foreign-key ×1

mysql ×1