Aby zmniejszyć pliki bazy danych, chciałbym utworzyć (jeśli jest to możliwe) - indeksy bazy danych opartych na plikach z SQLite, w pamięci.

Tj. Plik bazy danych ABC.DB3, ale utwórz indeks na różnych dziedzinach w ABC.DB3, w bazie danych w pamięci bez konieczności skopiowania zawartości bazy danych na bazie plików ABC.DB3 na pamięć, ale uzyskanie wydajności (lub jeszcze lepiej Ponieważ indeksy są oparte na pamięci), jak podczas wykonywania wyszukiwań na bazie plików ABC.DB3?

Dzięki!

1
Carl Harrison 17 luty 2017, 13:22

2 odpowiedzi

Najlepsza odpowiedź

Nie jest to możliwe w wbudowanych indeksów.

Musisz ręcznie wykonać indeksowanie, tj. Coś takiego:

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 = ?);

Możliwe jest ukrycie tego w Wirtualny stół, ale prawdopodobnie nie warto wysiłku .

0
CL. 17 luty 2017, 10:43

Możesz załadować istniejącą bazę danych do otwartej bazy danych ": Pamięć:" jako Filepath. Następnie możesz dodać indeksy do tej bazy danych.

0
Milan Markovic 17 luty 2017, 12:45