当前位置: 代码迷 >> SQL >> sqlite 的数据插入速度有关问题
  详细解决方案

sqlite 的数据插入速度有关问题

热度:77   发布时间:2016-05-05 14:52:59.0
sqlite 的数据插入速度问题

昨天写了一个将 5000 万行数据导入 sqlite 的程序。

?

就是简单的 key, value 型数据,key 为定长字符串,同时以此列为主键,建立索引。

?

最初的做法是,直接插入单表,每一万行数据为一个事务。用了一个晚上,大概 10 个小时,只插入了 2500万行。只完成了一半。最初的10万行数据,每一万行插入耗时都在1秒内。随着表内的数据增多,插入速度越来越慢,到 400万行时,每一万行数据插入耗时已经接近 20 秒。。。

?

翻看了 sqlite 官网的 FAQ,有这样的描述,大概意思是:?

在非单行事务的情况下,sqlite 在普通 PC 上能轻松达到 5 万行每秒的插入速度; 而在单行事务的情况下,7200转的硬盘只能达到 6 条每秒(因为要保证事务性,磁头就需要来回切换写入数据)。

?

所以,这里插入慢的原因应该是建立索引的耗时。

?

由于这些数据里有重复数据,所以不方便采用先插入数据,后建立索引的方式。只能进行分表,以减小表的规模。于是,分为 256 个表,以 key 的头两个字母做散列。只用了不到半个小时就插入完毕。

?

需要注意的是,尽量控制每个分表的每次插入数据在 1 万行以上,减少事务的耗时。

1 楼 Zhongwei_leg 2011-07-18  
万行     秒数
13       1
37       2
100     4
150     6
215     10
450     20
2 楼 一块可怜的牛皮糖 2011-08-25  
把数据分成256个表,然后对key的前两个字符建立散列么?
3 楼 Zhongwei_leg 2011-08-30  
一块可怜的牛皮糖 写道
把数据分成256个表,然后对key的前两个字符建立散列么?

是的
  相关解决方案