>> The program took 47 seconds to run, but the results only account for 
>> .39 seconds
>
> Most likely all the time is being spent in IO related system calls
> - read(), write() and fsync().
> 
> Dan.


Thanks for the idea Dan. How can I confirm this or try reducing the time
spent? I use the same method for reading my input file when I run both
SQLite and our in house system, and the other way only takes 4 seconds
total so I don't think it could be from that. Also, when I run our in
house system and use the profiler the time spent adds up to 100%

So this must be something within SQLite. I am using a transaction for my
queries. How can I find all of that missing time?


If anybody is interested, here is my main chunk of code. ReadLine()
parses the input file and fills the required variables. This method is
shared for both database systems (SQLite and ours). ReadSQLiteComponent
just calls one of the sqlite3_column functions based on the type of the
field, and a similar method is used for our system. 


                std::ifstream inf(argv[1]);

                sqlite3 *db;
                sqlite3_stmt *stmt;
                sqlite3_stmt *stmt2;
                sqlite3_stmt *stmt3;
                int rc = sqlite3_open(argv[3], &db);
                if( rc )
                {
                        printf("Can't open database: %s\n",
sqlite3_errmsg(db));
                        sqlite3_close(db);
                        return -1;
                }
                sqlite3_prepare(db,"BEGIN TRANSACTION;", 100, &stmt,0);
                sqlite3_step(stmt);

                char * qry = "SELECT * FROM LEVEL1 WHERE COUNTRY_ID = ?
AND DIR_SEARCH_AREA1 = ? AND ADDRESS_TYPE = ? AND PHONETIC_KEY LIKE ?
;"; 
                int p = sqlite3_prepare_v2(db,qry,1000,&stmt,0);
                char * qry2 = "SELECT * FROM LEVEL2 WHERE PARENT_KEY = ?
AND PRIM_NBR_LOW <= ? AND PRIM_NBR_HIGH >= ?;";
                int p2 = sqlite3_prepare_v2(db,qry2,1000,&stmt2,0);
                char* qry3 = "SELECT * FROM LEVEL3 WHERE PARENT_KEY = ?
;";
                int p3 = sqlite3_prepare_v2(db,qry3,1000,&stmt3,0);
                if ( p || p2 || p3 )
                {
                        printf("Can't create prepared statement: %s\n",
sqlite3_errmsg(db));
                        sqlite3_close(db);
                        return -1;
                }

                while (ReadLine(inf))
                {
                        sqlite3_bind_text(stmt, 1, cntryid, -1,
SQLITE_TRANSIENT);
                        sqlite3_bind_int(stmt, 2, searcharea);
                        sqlite3_bind_text(stmt, 3, addrtype, -1,
SQLITE_TRANSIENT);
                        int len = strlen(phnkey);
                        phnkey[len] = '%';
                        phnkey[len+1] = '\0';
                        sqlite3_bind_text(stmt, 4, phnkey, -1,
SQLITE_TRANSIENT);

                        while(sqlite3_step(stmt)==SQLITE_ROW)
                        {
                                for(int i=0; i<numFields[0]; i++)
                                {
                                        ReadSQLiteComponent(0,i, stmt);
                                        if (i==51) //LEVEL1.RECORDKEY
        
sqlite3_bind_int(stmt2,1,sqlite3_column_int(stmt, i));
                                }
                                sqlite3_bind_text(stmt2,2,prmlow, -1,
SQLITE_TRANSIENT);
                                sqlite3_bind_text(stmt2,3,prmhigh, -1,
SQLITE_TRANSIENT);
                                while(sqlite3_step(stmt2)==SQLITE_ROW)
                                {
                                        for(int i=0; i<numFields[1]+1;
i++)
                                        {
                                                ReadSQLiteComponent(1,i,
stmt2);
                                                if (i==27)
//LEVEL2.RECORDKEY
        
sqlite3_bind_int(stmt3,1,sqlite3_column_int(stmt2, i));
                                        }
        
while(sqlite3_step(stmt3)==SQLITE_ROW)
                                        {
                                                for(int i=0;
i<numFields[2]+1; i++)
        
ReadSQLiteComponent(2,i, stmt3);
                                                q++;
                                        }
                                        sqlite3_reset(stmt3);
                                }
                                sqlite3_reset(stmt2);
                        }
                        sqlite3_reset(stmt);
                }

                sqlite3_prepare(db,"END TRANSACTION;", 100, &stmt,0);
                sqlite3_step(stmt);

                sqlite3_finalize(stmt);
                sqlite3_finalize(stmt2);
                sqlite3_finalize(stmt3);
                sqlite3_close(db);


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

Reply via email to