【发布时间】:2014-02-13 05:35:34
【问题描述】:
在创建任何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
嗯,第二张表showed 上的sid 似乎不是唯一且没有索引的问题?如何为该语句添加索引?
也许还有其他建议?
【问题讨论】:
-
将数据加载到内存是操作系统的责任。它会做得很好。您的选择更有可能是非常不理想的。但为此,您必须向我们展示 exact 选择和架构(如果您需要匿名,则根据需要重命名列,但所有子句和条件必须匹配)。
-
@JanHudec 谢谢。完成。