我是否可以在磁盘上创建实际数据库文件的SQLite数据库的内存索引

时间:2017-02-17 10:22:14

标签: sqlite memory indexing

为了减少数据库的文件大小,我想创建(如果可能的话) - 来自SQLite的基于文件的数据库的索引,在内存中。

即。 数据库文件ABC.db3 但是在ABC.db3中的各个字段上创建一个索引到一个内存数据库中,不必将基于ABC.db3文件的数据库的内容复制到内存中,但是要获得性能(甚至更好,因为索引是内存 - 基于)在基于文件的ABC.db3上执行搜索时?

谢谢!

2 个答案:

答案 0 :(得分:0)

内置索引无法做到这一点。

您必须手动进行索引,例如:

CREATE TABLE disk.Tab (
    ID   INTEGER PRIMARY KEY,
    Name TEXT,
    [...]
);

CREATE TABLE memdb.IndexOnTab (
    Name TEXT,
    ID   INTEGER,
    PRIMARY KEY (Name, ID)
) WITHOUT ROWID; -- clustered index

INSERT INTO IndexOnTab SELECT Name, ID FROM Tab;

-- instead of SELECT * FROM Tab WHERE Name = ?
SELECT *
FROM Tab
WHERE ID = (SELECT ID
            FROM IndexOnTab
            WHERE Name = ?);

有可能将其隐藏在virtual table中,但这可能不值得。

答案 1 :(得分:0)

您可以将现有数据库加载到使用“:memory:”打开的数据库作为文件路径。然后,您可以向该数据库添加索引。