sqlite插入数据效率提升解决方案

本文探讨了SQLite数据库在不同场景下的插入效率,通过对比测试揭示了使用事务和C++调用方式能够显著提高插入速度,特别是在处理大量数据时效果更为明显。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sqlite插入效率对比

1.   基本信息

建表:

create table if not existstttable(id integer primary key autoincrement,name varchar(100))

 

笔者电脑配置:

硬盘是250G三星ssd硬盘

cpu、OS、内存如下


2.   插入效率对比

2.1   理论及结论

理论:

sqlite 插入数据很慢的原因:sqlite在没有显式使用事务的时候会为每条insert都使用事务操作,而sqlite数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进行大量的操作,时间都耗费在I/O操作上,所以很慢。
解决方法是显式使用事务的形式提交:因为我们开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打开一次。

结论:

(1)   效率最高:使用“事务+cpp调用方式”的方案插入效率最高。对比测试一、四的commit插入即可得到该结论。

(2)   其次:使用“事务+一次插入多条记录”的方案。

(3)   再次:使用“事务”次之

(4)   与要插入的记录数有关。数量越多,效率的差别越明显。

(5)   对比测试一、三可以看出,一次插入多条记录的方案,在记录数为“万”级别时效率上的提升也并不明显,仍然只有“秒”级。


2.2   思路和分析:

插入的方法分为:

(1)   直接执行insert语句,一个sql语句插入一条记录。

(2)   在一个insert语句中添加多个“值组”,即一个insert插入多条记录。

(3)   使用事务(Transaction)。

(4)   存储过程。

 

分析:

(1)   在记录较多时,一次插入多条记录比一次插入单条记录效率高。

(2)   在记录较多时,使用事务能显著提升插入效率。

(3)   使用存储过程比单纯的插入的sql语句效率高。但是,Sqlite不支持存储过程。

2.3   测试一:使用事务对比

结论:由下表可以明显看出,使用事务比不使用,要插入的记录数越多则效率越明显。

 

记录数

Commit插入耗时

无commit 插入耗时

1

0.091149 s

0.095510 s

10

0.073623 s

0.908365 s

100

0.107786 s

8.494171 s

1000

0.164266 s

91.384458 s

1万

0.498805 s

417.994334 s 约7分钟

10万

10.655899 s

9437.470941 s 约157分钟

 

2.4   测试二:

一次只执行一个插入

记录数

Commit插入耗时

无commit 插入耗时

1

0.089691 s

0.078871 s

10

0.839161 s

1.049796 s

100

8.439179 s

8.845316 s

1000

88.707938 s

90.850646 s

1万

 

 

10万

 

 

 

2.5   方式三

一条sql语句插入多条记录,有commit。实例sql语句如下,代码使用一次5条。

 

 记录数

有commit

无commit 插入

10

0.077758 s

0.153611 s

100

0.104861 s

1.842270 s

1000

0.100431 s

19.040623 s

1万

0.248039 s

188.313666 s

10万

1.948906 s

 1878.265314 s

100万

17.430737 s

 

 



2.6   测试四

使用sqlite3提供的c++的调用方法测试插入效率。

记录数

有commit

无commit 插入

1

0.000898 s

0.000898 s

10

0.000837 s

0.007919 s

100

0.001376 s

0.084375 s

1000

0.006201 s

0.849675 s

1万

0.051841 s

8.948034 s

10万

0.540143 s

88.447533 s

100万

5.280978 s

 

1000万

54.055197 s

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值