sqlite3数据库加载到内存c ++并选择性能

时间:2014-02-12 20:28:03

标签: c++ sqlite

在对它进行任何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}}不是唯一且没有索引的问题?如何在此语句中添加索引?

也许有其他一些建议?

1 个答案:

答案 0 :(得分:1)

您想要添加索引。由于该列不是唯一的,因此您需要使用单独的命令添加它:

CREATE INDEX showed_sid ON showed (sid);

创建表格后立即执行此操作。