sqlite 插入数据很慢的原因是因为它是已文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据进行大量的操作,那时很慢。
解决方法是用事务的形式提交:因为我们开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打开一次。
我在没有用事务形式插入4366条数据时用了507.781s,平均每一插入一条数据是116ms,用事务形式,插入只用了391ms,相关很大吧。
事务方式:
顺带一点在sqlite里的单引号转义不是用反斜杠'/'而是用单引号,就是在单引号前再加一个单引号('').
下面是写的一个统计apache的脚本,apache日志按日期分目录,在日期目录下按每小时分文件,日志数据源:
124.115.0.27 - - [25/02/2011:23:00:01] "GET /images/css.css HTTP/1.1" 200 3487 "http://www.XXXX.com/index.PHP?categoryid=175" "Sosospider+(+http://help.soso.com/webspider.htm)"
221.130.177.108 - - [25/02/2011:22:59:53] "GET /index.PHP?newsid=2010122810463740 HTTP/1.1" 200 5079 "-" "-"
脚本如下: