我要在此处实现的条件是,sqlite数据库仅保存最近的1000条记录。每个记录都有时间戳记。立即生效的低效逻辑之一就是检查记录总数。如果它们超过1000,则只需删除掉到外围的那些。
但是,我将必须对每个INSERT进行此检查,这会使事情效率很低。
您可以为此使用一个隐式的“ 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 EACH ROW
触发器,因此当您批量插入许多记录时,值得暂时禁用触发器。
如果INSERT太多,那么在数据库方面您将无能为力。您可以通过添加触发条件(例如)来实现不那么频繁的触发调用AFTER INSERT WHEN NEW.rowid % 100 = 0
。选择仅使用LIMIT 1000(或创建适当的视图)。
我无法预料会有多快。最好的方法是仅衡量您在特定情况下将获得的性能。
问题内容: 我有一个数据库,有两个表和。表中有一个主键,表中有一个外键。 我想在表上创建一个约束,表中最多可以存储5个约束。 我需要知道这种约束的类型,以及如何通过SQL Server中的查询来完成此约束。 问题答案: 没有约束可以强制执行该规则,但是可以使用如下所示的触发器来做到这一点:
在MariaDB数据库中,使用语句和子句从表中检索一个或多个记录。 语法: 示例1: 以降序检索记录: 使用语句并带有子句查询表中的数据。结果列的值按降序显示,为。参考如下语句 - 执行上面查询语句,得到以下结果 - 示例2: 按列的值升序检索记录: 执行上面查询语句,得到以下结果 - 示例3:分页 在应用程序中,由于数据记录太多,不能全在一个页面中全部显示,我们经常要使用分页来显示。假设每页显示
问题内容: 临时表中的记录是否有限制。.我尝试使用130万条记录..将来我可能要根据应用程序的要求处理数十亿条记录。.可能吗?如果我能知道记录的限制,那么我可以尝试从源数据库中拆分记录,并在限制范围内进行管理。提前致谢 问题答案: tempdb与任何其他数据库之间的差异很小,尤其是在限制方面。 如果可以将其存储在用户表中,那么也可以将其存储在临时表中。它不需要放入RAM,因为tempdb像其他任何
SQLiteDB 是基础的 SQLite 的 Swift 封装。SQLiteDB 非常简单,不提供任何高级的函数,不完全是 Swift 编写的,所以跟 Swift 调用 sqlite C API 的方法会有点不同。 SQL 查询示例: let data = db.query("SELECT * FROM customers WHERE name='John'") let row = dat
问题内容: 我负责处理的应用程序之一是每隔x秒检查一次Oracle DB表,以查看是否有新数据要处理(其他实时应用程序正在填充该数据)。 我们新的客户业务流程迫使我们的实时性在同一时间(比如说10000)同时每天填充几次记录来填充该表。下次我的应用程序检查是否有任何要处理的内容时,遇到10 000条记录并尝试对其进行处理。 它的设计不是很好,而且扩展性还不够好。快速解决方案是限制该应用程序从Ora
问题内容: 关闭。 这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 8年前关闭。 改善这个问题 我在使用MySQL的数据库上执行SQL查询,但仅从预期的24000行中获取了前1000行。如果将结果导出到XML表单,我将再次获得前1000个。有没有办法禁用该限制并取回所有行?否则,我将不得不合并24个XML文件:/ 问题答案: 请执行