有什么方法可以在磁盘上进行任何SELECTS
之前将sqlite3数据库文件从磁盘加载到内存中? sqlite3_step()
的工作真的很慢...所以我想将数据库加载到内存中以快速加载数据。
在sqlite3之前,我使用简单的二进制数据序列化,并且stackoverflow的所有成员都建议我使用sqlite3
进行序列化,现在我的程序确实很慢。。 (序列化可以很好地与事务配合使用)
也许这也会有所帮助。我的SELECT
:
每个未序列化的对象上都有两个选择和两个sqlite3_step()
。
查询看起来像SELECT aaaa,bbb,ccc,ddd,eee,ggg,hhh,fff,jjj FROM table
的两个查询。
第一个表具有唯一的aaaa
键,但第二个表不是唯一的(因此似乎完全没有索引)
更新:
// Create SQL statement
std::string sql_createtable = "CREATE TABLE IF NOT EXISTS ssssssss(" \
"sid INTEGER PRIMARY KEY NOT NULL," \
"last_access_time INT ," \
"last_c_time INT ," \
"total_c INT ," \
"last_viewed_lid INT ," \
"last_viewed_ltid INT );";
// "showed TEXT );";
std::string sql_showed = "CREATE TABLE IF NOT EXISTS showed(" \
"sid INT NOT NULL," \
"rid INT ," \
"lid INT ," \
"ltid INT );";
选择1:
SELECT sid, last_access_time, last_c_time, total_c, last_viewed_lid, last_viewed_ltid FROM ssssss
选择2:
"SELECT rid, lid, ltid FROM showed WHERE sid= ?1"; // sid is from first table. can be more than 1 the same sid
嗯,似乎第二个表
sid
上的showed
不是唯一且没有索引的问题?如何在此语句中添加索引?也许还有其他建议?
最佳答案
您要添加索引。由于该列不是唯一的,因此需要使用单独的命令添加它:
CREATE INDEX showed_sid ON showed (sid);
只需在创建表后立即执行此操作即可。
关于c++ - sqlite3数据库加载到内存C++并选择性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21738880/