sqlite3数据插入耗时问题

在Android开发中,遇到sqlite3单条记录插入耗时10-30ms的问题,由于每次插入前有查询操作,大量数据操作效率低下。通过研究发现,这是由于Android的数据库事务处理机制导致的。解决方案是使用数据库事务处理,如在数据插入前调用beginTransaction(),在循环插入后使用setTransactionSuccessful()标记事务成功,最后调用endTransaction()结束事务,以提高批量插入的效率。
摘要由CSDN通过智能技术生成

今天在写一个工程时,发现sqlite使用query的insertOrThrow记录插入接口时发现,单条记录插入时间在10-30ms之间,插入操作中有查询数据库操作(判重),如此上千条数据操作时间岂不亚历山大,google后发现android的数据库事务处理机制导致的,对于批量的上百条记录插入、删除、修改操作,在批量开始时要启动事务,完毕后提交此次事务并结束该事务:

解决方法:

添加事务处理,最好上百条数据库批量操作就使用此方法

//数据插入操作之前

要在SQLite数据库中快速插入几百万条数据,可以考虑以下几种方法: 1. 使用事务(Transaction):通过将多个插入操作封装在一个事务中,可以显着提高插入大量数据的速度。在开始事务之前,可以将数据库设置为批量插入模式(PRAGMA synchronous = OFF; PRAGMA journal_mode = OFF;)。然后,将所有插入操作放在同一个事务块中,最后提交事务。这样可以减少磁盘I/O和事务日志写入的次数,加快插入速度。 2. 使用批量插入语句:SQLite支持使用INSERT语句一次插入多个记录。可以将多个插入值放在一个INSERT语句中,通过使用多个括号或UNION ALL操作符来实现。例如,INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), ...; 使用批量插入语句可以减少SQL语句执行的次数,提高插入速度。 3. 使用预编译语句:编译和执行SQL语句是耗时的过程,特别是对于大量的插入操作。可以使用预编译语句(Prepared Statement)来解决这个问题。预编译语句将SQL语句预先编译好,并通过绑定参数来执行插入操作。这样可以避免重复编译SQL语句,提高插入速度。 4. 关闭索引和约束:在大量数据插入之前,可以暂时禁用表的索引和约束(如FOREIGN KEY约束),以加快插入速度。在插入完成后,再重新启用索引和约束。 虽然以上方法可以提高插入速度,但插入大量数据可能仍然需要一定的时间。如果数据量很大,可以考虑将数据分批次插入,每次插入一部分数据,以减少插入操作的负载和提高稳定性。此外,可以优化数据表的设计和索引,调整系统和硬件配置,以提高整体性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值