前一段时间有点郁闷,犯了点最基本的
错误原本,应该相当的有效的事。。。。
现在知道了,毕竟大规模的插入还是要用事务的。
下面是
一个典型的事例,测试不同的
方法的插入表的效率前面的用了事务处理格式,希望大家引以为戒。
代码:
#include <stdio.h> #pragma comment(lib,"sqlite3static.lib") #include "sqlite3.h" #include <iostream> using namespace std; #include <ctime> char value[100]; int main(void) { clock_t startclock,endclock; sqlite3* db = 0; /*************************************************************************/ sqlite3_open("MyDB",&db); sqlite3_exec(db,"create table Student(english QString)",0); /*situation 1*/ startclock=clock(); sqlite3_exec(db,"begin",0); for(int i=0;i<100;i++) { sprintf(value,"insert into Student values(%d)",i); sqlite3_exec(db,value,0); } sqlite3_exec(db,"commit",0); endclock=clock(); cout<<(double)(endclock-startclock)/CLOCKS_PER_SEC<<endl; sqlite3_close(db); /***************************************************************************/ sqlite3_open("MyDB1",0); /* situation 2*/ startclock=clock(); for(int i=0;i<100;i++) { sprintf(value,0); } endclock=clock(); cout<<(double)(endclock-startclock)/CLOCKS_PER_SEC<<endl; sqlite3_close(db); /*****************************************************************************/ return 0; } |
在我的机子上的结果是
0.18
11.757
效率差了很多,前者只有在事务提交时打开了数据库一次,写入一次,而后者在每次insert时都打开了数据库,进行写入操作,然后关闭数据库文件,进行了多次IO读写,自然就慢了。
!@!@#@$!#@%$%$%^$&$&$%(*$^(&&*)%)*&)(_(*&_&(_*_+&(^)^*)
Why? CSDN doesn't have C/C++ code insert format!!!!!