I just encountered very curious case in Sqlite.
I have very simple data base with only one table and one index:
"CREATE TABLE IF NOT EXISTS notes(id INTEGER PRIMARY KEY, note TEXT)";
My updates to the simple text database were very slow. Extremely slow!
I changed my code and achieved 1000 speed improvement.
Nevertheless, something must be wrong with sqlite3_bind_parameter_index
functions !?
My Update function looks as follows:
int UpdateNotesRecord(sqlite3 *handle,
int idArg,
CString note)
{
sqlite3_stmt *stmt;
int rc;
#if 0 // 100 updates with 5 charcter string takes 12 000 ms
char *sql = "UPDATE notes SET note=:cNote WHERE id=:idArg";
rc = sqlite3_prepare_v2(handle, sql, (int) strlen(sql), &stmt,
NULL/*&tail*/);
if(rc) PrintError("UPDATE prepare_v2",rc,handle);
// idArg
rc = sqlite3_bind_int(stmt, sqlite3_bind_parameter_index(stmt,":idArg"),
idArg);
if(rc) PrintError("bind idArg error",rc,handle);
int byteCount = note.GetLength();
char *p = note.GetBuffer();
rc = sqlite3_bind_text(stmt, sqlite3_bind_parameter_index(stmt,":cNote"),
p, byteCount, SQLITE_STATIC);
if(rc) PrintError("bind note text error",rc,handle);
#endif
#if 1 // 100 updates with 5 character string takes 90 ms
// magnitude of 1000 less than with code above!
char *sql = "UPDATE notes SET note=? WHERE id=?";
rc = sqlite3_prepare_v2(handle, sql, (int) strlen(sql), &stmt,
NULL/*&tail*/);
if(rc) PrintError("UPDATE prepare_v2",rc,handle);
// idArg
rc = sqlite3_bind_int(stmt, 1, idArg);
if(rc) PrintError("bind idArg error",rc,handle);
// note
int byteCount = note.GetLength();
char *p = note.GetBuffer();
rc = sqlite3_bind_text(stmt, 2, p, byteCount, SQLITE_STATIC);
if(rc) PrintError("bind note text error",rc,handle);
#endif
// UPDATE STEP
rc = sqlite3_step(stmt);
if(rc != SQLITE_DONE)
{
PrintError("update step error",rc,handle);
}
rc = sqlite3_finalize(stmt);
if(rc) PrintError("finalize update error",rc,handle);
return rc;
}
Thank you for reading. Any comment greatly appreciated.
Samuel
__________________________________________________________________
Yahoo! Canada Toolbar: Search from anywhere on the web, and bookmark your
favourite sites. Download it now
http://ca.toolbar.yahoo.com.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users