为了减小数据库的文件大小,我想在内存中创建(如果可能的话)-从SQLite创建基于文件的数据库的索引。
例如,数据库文件ABC.db3,但在ABC.db3中的各个字段上创建索引,而无需将基于ABC.db3文件的数据库的内容复制到内存中的数据库中,但获得与在基于文件的ABC.db3上执行搜索时一样的性能(或者甚至更好,因为索引是基于内存的)?
谢谢!
发布于 2017-02-17 18:43:09
对于内置索引,这是不可能的。
您必须手动进行索引,例如,如下所示:
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中隐藏这一点,但这可能不值得这么做。
发布于 2017-02-17 20:45:44
您可以将现有数据库加载到以":memory:“作为文件路径打开的数据库中。然后,您可以向该数据库添加索引。
https://stackoverflow.com/questions/42295352
复制相似问题