The idea of temporary tables in-memory is nice, but I do not know how to apply it. I see in the documentation I can use the TEMP in CREATE TABLE, but I am not sure of the effect. Does it mean that the table is created in memory and it is lost in sqlite3_close?
On Fri, Apr 26, 2013 at 8:07 PM, David King <dk...@ketralnis.com> wrote: > auto_vacuum Turn off autovacuum and just run it yourself when you're idle > foreign_keys Turn off foreign keys checks (or just don't use foreign keys) > ignore_check_constraints Same > journal_mode OFF might actually be faster than MEMORY, but disables rollback > support > locking_mode EXCLUSIVE can be mildly faster in some cases > > > secure_delete OFF > > > synchronous OFF as you said > > > cache_size beef up as you said. this won't always make everything faster > though, since it can starve the other processes on your machine for memory > even for rarely-used sqlite data when they could potentially make better use > of the OS page cache. > temp_store set to MEMORY, this will help if you have queries that create > temporary tables, even if you're not doing so yourself (e.g. unindexed group > bys) > > > > If you can, use an entirely :memory: database. This may not work for you, but > if it does, great. > > Since you're not using journal_mode = WAL this is moot for you, but if you > were I'd say turn off wal_autocheckpoint and wal_checkpoint yourself when > you're idle > > For my somewhat-similar use case I find that writing intermediate changes to > an in-memory table (insert into my_temp_table) and periodically flushing > those to disk (insert into real_table select from my_temp_table; delete from > my_temp_table) can help speed things up if a lot of index-updating is > involved in the on-disk table. > > Make sure you're doing all of your inserts in a transaction. inserting is > pretty cheap, but committing a transaction is expensive, and if you're not in > a transaction each insert is its own transaction > > Make sure you're re-using your prepared statements > > Play with page_size to get it right for your write patterns > > Don't use a connection concurrently, it's doing internal locking anyway. If > you must, use the shared page cache. If you're doing it from multiple > processes, use WAL mode. > > > > > On Friday, 26 April, 2013 at 10:44, Paolo Bolzoni wrote: > >> The subject pretty much says it all, I use sqlite3 as a way to save >> temporary results from a calculation. >> >> In this context I do not care about safety of the data. If the program >> fails or there is a blackout I will just delete the sqlite3 file, eventually >> fix the bug, and restart. >> >> At the moment I use this pragmas: >> >> PRAGMA synchronous = OFF; >> PRAGMA journal_mode = MEMORY; >> PRAGMA cache_size = -10240; >> >> Is there anything other I can do to speed-up sqlite3 at expenses of >> safety? >> >> Thanks, >> Paolo >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org (mailto: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 _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users