Hi yoky,

2008/10/29 yoky <[EMAIL PROTECTED]>:
> Hi all,
>    I create a table with 250 columns and this table has 30000 records,  I
> want to select the records from the table which satisfy certain conditions.
> the SQL statement like this:
>        select * from tablename  where (conditions);
>    Then use sqlite3_get_table() function to get the contents. If the record
> set I get is a little more, my system has not enough memory to hold them.
>    So changed the SQL statement:
>        select ID from tablename where (conditions);
>    ID is a primary key in the table, first I save all of ID into a buffer,
> then select them through ID one by one.
>         select * from tablename where ID=id;
>    Here is my problems:
>    1. The time to get all of the ID in the table (has 30000 records) is
> about 40 seconds. It's too long to meet the performance required.
>        Are there some efficient way to select a lot of records satisfied
> some conditions  from the table in the embedded system with not
>    so fast CPU and not enough memory? Or select certain numbers records
> satisfied some conditions  one time, and then select several
>    times.

Don't use sqlite3_get_table(). Use

    sqlite3_prepare_v2()
//
//  bind any relevant parameters here, sqlite3_bind_int() etc...
//
    while( SQLITE_ROW == sqlite3_step() )
    {
//
//  process row of data - get columns using sqlite3_column_int() etc
//
    }
    sqlite3_finalize()

>
>   2. I found the memory malloced by sqlite3_get_table() is more large than
> the database file when use "select * from tablename",why?

sqlite3_get_table() returns all data as strings. Any column data that
was of integer or real type would probably require more bytes in the
return from sqlite3_get_table() than the original storage format.
It is difficult to be certain without your source data and more
infomation on how big the difference is.

Rgds,
Simon


> _______________________________________________
> 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