Note that there are some explanatory texts on larger screens.

plurals
  1. POIn SQLite, do prepared statements really improve performance?
    primarykey
    data
    text
    <p>I have heard that prepared statements with <a href="http://en.wikipedia.org/wiki/SQLite" rel="noreferrer">SQLite</a> should improve performance. I wrote some code to test that, and did not see any difference in performance with using them. So, I thought maybe my code was incorrect. Please let me know if you see any errors in how I'm doing this...</p> <pre><code>[self testPrep:NO dbConn:dbConn]; [self testPrep:YES dbConn:dbConn]; reuse=0 recs=2000 2009-11-09 10:39:18 -0800 processing... 2009-11-09 10:39:32 -0800 reuse=1 recs=2000 2009-11-09 10:39:32 -0800 processing... 2009-11-09 10:39:46 -0800 -(void)testPrep:(BOOL)reuse dbConn:(sqlite3*)dbConn{ int recs = 2000; NSString *sql; sqlite3_stmt *stmt; sql = @"DROP TABLE test"; sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL); sql = @"CREATE TABLE test (id INT,field1 INT, field2 INT,field3 INT,field4 INT,field5 INT,field6 INT,field7 INT,field8 INT,field9 INT,field10 INT)"; sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL); for(int i=0;i&lt;recs;i++){ sql = @"INSERT INTO test (id,field1,field2,field3,field4,field5,field6,field7,field8,field9,field10) VALUES (%d,1,2,3,4,5,6,7,8,9,10)"; sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL); } sql = @"BEGIN"; sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL); if (reuse){ sql = @"select * from test where field1=?1 and field2=?2 and field3=?3 and field4=?4 and field5=?5 and field6=?6 and field6=?6 and field8=?8 and field9=?9 and field10=?10 and id=?11"; sqlite3_prepare_v2(dbConn, [sql UTF8String], -1, &amp;stmt, NULL); } NSLog(@"reuse=%d",reuse); NSLog(@"recs=%d",recs); NSDate *before = [NSDate date]; NSLog([before description]); NSLog(@"processing..."); for(int i=0;i&lt;recs;i++){ if (!reuse){ sql = @"select * from test where field1=?1 and field2=?2 and field3=?3 and field4=?4 and field5=?5 and field6=?6 and field6=?6 and field8=?8 and field9=?9 and field10=?10 and id=?11"; sqlite3_prepare_v2(dbConn, [sql UTF8String], -1, &amp;stmt, NULL); } sqlite3_bind_int(stmt, 1, 1); sqlite3_bind_int(stmt, 2, 2); sqlite3_bind_int(stmt, 3, 3); sqlite3_bind_int(stmt, 4, 4); sqlite3_bind_int(stmt, 5, 5); sqlite3_bind_int(stmt, 6, 6); sqlite3_bind_int(stmt, 7, 7); sqlite3_bind_int(stmt, 8, 8); sqlite3_bind_int(stmt, 9, 9); sqlite3_bind_int(stmt, 10, 10); sqlite3_bind_int(stmt, 11, i); while(sqlite3_step(stmt) == SQLITE_ROW) { } sqlite3_reset(stmt); } sql = @"BEGIN"; sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL); NSDate *after = [NSDate date]; NSLog([after description]); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload