Hullo Puneet,

Many thanks for your response.

My understanding of a sqlite3 "transaction" is probably poor. From  
your response
(if you are correct) I see that only UPDATES and INSERTS can be  
speeded up
via bundling many numbers of them in a Being/Commit block? Leading me  
to ask:
Is there no difference in behavior between a SINGLE select and several
of them within the context of transaction?

And yes, each of the many SELECTS have a different WHERE clause.

-rosemary.

On Apr 7, 2009, at 12:38 PM, P Kishor wrote:

> On Tue, Apr 7, 2009 at 2:36 PM, Rosemary Alles  
> <al...@ipac.caltech.edu> wrote:
>> Hullo Igor,
>>
>> Many thanks for your response: I believe I didn't phrase my question
>> correctly:
>>
>> 1) If I were to bundle several thousand SELECT statements in a single
>> transaction - why would it not run faster?
>
> as far as I understand, transactions matter only in the context of
> UPDATEs and INSERTs for the purpose of speed (keep in mind, I am not
> addressing data integrity -- the ACID part here, but only speed). A
> transaction speeds this multiple UPDATEs and INSERTs by decreasing the
> number of times your program interacts with slowest part of your
> computer, the hard disk.
>
> Multiple SELECTs in a transaction might help with the integrity, but
> ensuring that you don't end up getting data changed in mid-stream, but
> won't speed up the query.
>
> Are all your thousands of SELECTs based on different WHERE criterion?
> If not, they would really be just one SELECT.
>
>> 2) This is precisely the problem though - each of those statements
>> will yield rows of results to be parsed with
>> sqlite3_column - in the context of the user's (my) program. If many
>> SELECT statements are issued within the context
>> of a single transaction (repeatedly), how does one deal with the
>> results without a callback (if using sql_step)? Yes,
>> sql_exec is touted to be a wrapper around sql_prepare, bind, step.
>> However, is does (also - additionally) offer the
>> option of a user supplied calleback routine which sql_prepare etc. do
>> not.
>>
>> Essentially, my question is about context. if many many SELECTS are
>> bundled in a single transaction using prepare,
>> bind and step. In what context does one parse the results? Do we not
>> have synchronizing issue here?
>>
>> Thanks again,
>> rosemary
>>
>> On Apr 6, 2009, at 8:03 PM, Igor Tandetnik wrote:
>>
>>> "Rosemary Alles" <al...@ipac.caltech.edu> wrote
>>> in message news:20A6B796-613B-4F5D- 
>>> bfca-359d6b9fa...@ipac.caltech.edu
>>>> I want to speed up my app. Can I run SELECT statements within the
>>>> context of a transaction.
>>>
>>> Yes, but it's unlikely to make it run any faster.
>>>
>>>> If so, how does one handle the query
>>>> results?
>>>
>>> The same way as when running it without an explicit transaction.
>>>
>>>> I would assume this cannot be done with sql_prepare,
>>>> sql_bind, sql_step?
>>>
>>> Of course it can. See sqlite3_column_*
>>>
>>>> Would I *have* to use sql_exec
>>>
>>> No. And if you look at the implementation of sqlite3_exec, it uses
>>> sqlite3_prepare and sqlite3_step internally anyway. It's maintained
>>> mostly for backward compatibility.
>>>
>>>> What am I giving up
>>>> by using sql_exec vs sql_prepare, sql_bind and sql_step?
>>>
>>> Off the top of my head: 1) strong typing (you get all data as  
>>> strings,
>>> so that, say, an integer is converted to string and then you'll have
>>> to
>>> convert it back); 2) streaming (with sqlite3_exec, the whole  
>>> resultset
>>> must be present in memory at the same time; with sqlite3_step, only
>>> one
>>> row's worth of data needs to be present in memory; makes a huge
>>> difference for very large resultsets).
>>>
>>> Igor Tandetnik
>>>
>>>
>>>
>
>
> -- 
> Puneet Kishor http://www.punkish.org/
> Nelson Institute for Environmental Studies http://www.nelson.wisc.edu/
> Carbon Model http://carbonmodel.org/
> Open Source Geospatial Foundation http://www.osgeo.org/
> _______________________________________________
> 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