从我的SQLite表中删除多行的最佳实践

Best practice to DELETE multiple rows from my SQLite table

提问人:dbz 提问时间:10/24/2023 更新时间:10/24/2023 访问量:35

问:

我有一张表叫 .每分钟插入一个新行。还有更多的表:等,其中定义为 。这些表很大,它们每分钟接收大约 200-300 个新行,因此在一天结束时会有大量新数据。fingerprintsmetadatalocationsfingerprint_IDforeging_key

每天一次,我从指纹表中删除所有未使用的行,并从其他表中“删除级联”数据。此操作可能需要大约 2 分钟:

DELETE FROM fingerprints WHERE date < '2023-10-25 00:00:00:00' and used = false;

我的数据库被锁定了大约 2 分钟,在此期间要执行的所有语句都在等待。问题是我的进程需要不断获得最新数据,否则会失败INSERT

有人可以帮我解决这个问题吗?在插入新数据时删除不必要的行的最佳做法是什么?

sqlite sql-insert sql-delete

评论

0赞 A. Cedano 10/24/2023
你好。您可以使用 TRIGGER 来解决这个问题。
0赞 jurez 10/24/2023
你有索引吗?如果没有这样的索引,可能需要搜索所有行并将锁升级到表级别。(date, used)where
0赞 dbz 10/24/2023
嗨,@jurez如果我通过这个查询更改该查询:我会遇到同样的问题。问题不在于主表搜索,因为行数不多......问题出在子表上,有很多行必须删除“删除级联”。DELETE FROM fingerprints WHERE id < 10908;
0赞 Shawn 10/25/2023
您还需要在这些表上建立适当的索引。

答: 暂无答案