您可以为此使用一个隐式的“ rowid”列。
假设您没有以其他方式手动删除行:
DELETe FROM yourtable WHERe rowid < (last_row_id - 1000)
您可以使用API函数或
max(rowid)
如果您不需要 正好有
1000条记录(例如,只想清理旧记录),则不必在每个插入记录上都进行记录。在程序中添加一些计数器,并每100次插入执行一次清理fi。
更新:
无论如何,您要为每个插页或每个选择支付性能。因此,选择取决于您所拥有的更多内容:INSERT或SELECts。
如果没有太多插入要关心性能,则可以使用以下触发器保留不超过1000条记录:
CREATE TRIGGER triggername AFTER INSERT ON tablename BEGIN DELETE FROM tablename WHERe timestamp < (SELECt MIN(timestamp) FROM tablename ORDER BY timestamp DESC LIMIT 1000);END
在timestamp列上创建唯一索引也是一个好主意(以防尚未创建PK)。还要注意,SQLITE仅支持
FOR EACHROW触发器,因此当您批量插入许多记录时,值得暂时禁用触发器。
如果INSERT太多,那么在数据库方面您将无能为力。您可以通过添加触发条件(例如)来实现不那么频繁的触发调用
AFTER INSERT WHENNEW.rowid % 100 = 0。选择仅使用LIMIT 1000(或创建适当的视图)。
我无法预料会有多快。最好的方法是仅衡量您在特定情况下将获得的性能。



