Arthur, For pre-compiled execution in SQLite, try using the sqlite_reset() function. It allows you to avoid having to re-compile your SQL every time you execute it. You can use sqlite_create_function() to do the equivalent of "parameterized" queries by creating a function which takes a parameter position and and returns the parameter value. I use this a lot in my code since I do a lot of inserts and want them to run fast without invoking the query compiler for each one.
-----Original Message----- From: Arthur C. Hsu [mailto:[EMAIL PROTECTED] Sent: Friday, November 14, 2003 3:50 AM To: 'Greg Obleshchuk'; [EMAIL PROTECTED] Subject: RE: [sqlite] Performance tuning question Hello Greg, The insert is not in transaction. I do the insert and update like CCriticalSection cs; void CDB::insert() { cs.Lock(); sqlite_exec_printf(pDB, "insert into db values(%d, %q, null, null, 0, null", 0, 0, 1, "A"); cs.Unlock(); } void CDB::update() { cs.Lock(); sqlite_exec_printf(pDB, "update db set str=%q where id=%d", 0, 0, "A", 1); cs.Unlock(); } As described in my previous mail, I have two threads that simultaneously accessing this in-mem DB. Thus I have to use locks to be sure of thread-safety. I keep pumping data into DB via insert from one thread. My sqlite version is 2.8.6 and I didn't compile it with -DTHREAD_SAFE=1. I have 1G bytes of memory in my development machine and it's hard to believe that I didn't have enough memory for a 50M database :) I use MDAC via .Net framework. I use ADO.Net in-memory table (System.Data.DataTable) and does not connect to any data source. BTW, I use Intel VTune and try to find out the bottleneck of my program. Execution of sqlite vbe is the most time-consuming (55%). However, yyparser of sqlite contributes 30% of load. I tend to believe this explains why the first 30 seconds the ADO.Net is faster than sqlite. SQL statements in ADO.Net always run precompiled, thus it saves time for parsing SQL commands. I'm trying to do precompiled execution in sqlite, and getting frustrated about that. The decaying phoenomenon is quite weird. My wild guesses are A. Issues of memory indexing: page index table grows bigger and bigger, thus indirection of memory tends to slow down B. SQLite try to do "safe" memory allocations, that is, malloc new memory block, memcpy old data, then free old memory block. These are just guesses. I'm trying to dig out why. Maybe you guys who are more familiar with sqlite internals can show me the answer :) Regards, Arthur --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]