有什么方法可以在磁盘上进行任何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/

10-09 07:34
查看更多