2017-02-17 4 views
1

データベースのファイルサイズを小さくするために、(可能であれば)ファイルベースのデータベースのインデックスSQLiteからメモリに格納されます。 データベースファイルABC.db3 すなわち実際のデータベースファイルがディスク上にあるSQLiteデータベースのインメモリインデックスを作成することはできますか?

が、メモリにABC.db3ファイルベースのデータベースの内容をコピーすることはなく、取得せずに、インメモリデータベースに、ABC.db3のさまざまなフィールドにインデックスを作成ファイルベースのABC.db3で検索を実行するときと同じようにパフォーマンスが向上します(インデックスがメモリベースなのでさらに優れています)。

ありがとうございます!

答えて

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でこれを非表示にすることも可能かもしれないが、それはおそらく努力する価値はありません。

0

":memory:"をファイルパスとして開いたデータベースに既存のデータベースを読み込むことができます。次に、そのデータベースに索引を追加できます。

関連する問題