为了减少数据库的文件大小,我想创建(如果可能的话) - 来自SQLite的基于文件的数据库的索引,在内存中。
即。 数据库文件ABC.db3 但是在ABC.db3中的各个字段上创建一个索引到一个内存数据库中,不必将基于ABC.db3文件的数据库的内容复制到内存中,但是要获得性能(甚至更好,因为索引是内存 - 基于)在基于文件的ABC.db3上执行搜索时?
谢谢!
答案 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:”打开的数据库作为文件路径。然后,您可以向该数据库添加索引。