在对它进行任何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
的{{1}}不是唯一且没有索引的问题?如何在此语句中添加索引?
也许有其他一些建议?
答案 0 :(得分:1)
您想要添加索引。由于该列不是唯一的,因此您需要使用单独的命令添加它:
CREATE INDEX showed_sid ON showed (sid);
创建表格后立即执行此操作。