Use sqlite3_prepare/bind/step instead of sqlite3_exec and group your 
activity into BEGIN ... COMMIT transactions.

Breeze Meadow wrote:
> Hi,
>  
> I found sqlite is kind of slow on windows (2003 server and XP professional). 
> Here is what i did:
> 1) downloaded and installed sqlite3.dll (version 3.6.5).
> 2) created a MSVC 6.0 C++ projects with the following code, which basically 
> runs a list of SQL statments on a opened database:
>  
> #include <stdio.h>
> #include "pctimer.h"
> #include "sqlite3.h"
> int main(int argc, char** argv)
> {
>  int ret;
>  double start, duration;
>  char* error = NULL;
>  char* database_name = "test.dat";
>  sqlite3* database = NULL;
>  ret = sqlite3_open(database_name, &database);
>  char* sql_list[] = {
>   "create table if not exists t1(f1)",
>   "insert into t1 values('a')",
>   "select * from t1",
>   "drop table if exists t1"
>  };
>  for (int i = 0; i < 4; i++)
>  {
>   TIME(ret = sqlite3_exec(database, sql_list[i], NULL, NULL, &error), 1000);
>   printf("sql_list[%d] = %d, %f msec\n", i, ret, duration);
>  }
>  sqlite3_close(database);
>  return 0;
> }
>  
> in "pctimer.h"
> #define TIME(Statement, Unit) start = pctimer(), Statement, duration = 
> (pctimer() - start) * Unit
> #include <windows.h>
> 
> __inline pctimer_t pctimer()
> {
>     static LARGE_INTEGER pcount, pcfreq;
>     static int initflag;
>     if (!initflag)
>     {
>         QueryPerformanceFrequency(&pcfreq);
>         initflag++;
>     }
>     QueryPerformanceCounter(&pcount);
>     return (double)pcount.QuadPart / (double)pcfreq.QuadPart;
> }
> 
> Here is a typical outputs from the program running in debug mode:
>  
> sql_list[0] = 0, 115.522582 msec
> sql_list[1] = 0, 146.979062 msec
> sql_list[2] = 0, 0.152468 msec
> sql_list[3] = 0, 127.423370 msec
>  
> The "create table", "insert into" and "drop table" are slower than I expected 
> whereas the "select" is ok (compared to published sqlite performance). I 
> tried turning off antivirus but got the same results. Notice my constraint is 
> these SQL statements must run one by one, not within a transaction.
>  
> My questions are:
> 1) are these expected performance on windows?
> 2) if not, what can be done to improve it?
>  
> Many thanks in advance.
>  
> FLX
>  
> 
> 
>       
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to