首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-07-26 
sqlite 的数据插入速度问题昨天写了一个将 5000 万行数据导入 sqlite 的程序。?就是简单的 key, value 型数

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的前两个字符建立散列么?
是的

热点排行