Need for Speed (databases)

viktoras didziulis viktoras at ekoinf.net
Tue Jul 17 08:42:51 EDT 2007


sharing the info on how to use sqlite in memory databases from within 
Revolution. Just tested in on my Rev, it works, so it may be useful for 
you too. Say we have my.db database file. We wish to load it as an in 
memory database to increase query performance. Here is the algorithm in SQL:
#first creating an in memory db
sqlite3 :memory:
ATTACH 'my.db' AS cpDb
#now repeat the sql string below for each table in the attached cpDb to 
copy all of them into memory
CREATE TABLE myTable AS SELECT * FROM cpDb.myTable
...
DETTACH cpDb

Ready to use. Now the former my.db file is loaded as in-memory database. 
This provides a big performance gain for complex queries!

So in Rev you would do:
put revOpenDatabase("sqlite",":memory:",,,,) into dbID
revExecuteSQL dbID, "ATTACH 'C:/my.db' AS cpDb"
repeat for each line myTable in dbTables #assuming dbTables contains a 
list of tables in the database
revExecuteSQL dbID, "CREATE TABLE :1 AS SELECT * FROM cpDb.:1", myTable
end repeat

Do not forget to close the database (revCloseDatabase dbID) before 
creating a new one. As far as I understand SQLite permits multiple in 
memory databases, so if you do not close the previous database and 
create new one you are likely to waste your RAM.

Best wishes
Viktoras






More information about the use-livecode mailing list