2015-04-03 2 views
0

C'est ma première fois avec sqlite et j'ai écrit une base de données simple pour stocker et récupérer des carreaux de carte. Voici la base de données SQLite:sqlite effectue très lente pour les carreaux de carte

CREATE TABLE IF NOT EXISTS Tiles (id INTEGER NOT NULL PRIMARY KEY, X INTEGER NOT NULL, Y INTEGER NOT NULL, Zoom INTEGER NOT NULL, Type INTEGER NOT NULL,Date TEXT) 

CREATE TABLE IF NOT EXISTS TilesData (id INTEGER NOT NULL PRIMARY KEY CONSTRAINT fk_Tiles_id REFERENCES Tiles(id) ON DELETE CASCADE, Tile BLOB NULL) 

CREATE TRIGGER fki_TilesData_id_Tiles_id BEFORE INSERT ON [TilesData] FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table TilesData violates foreign key constraint fki_TilesData_id_Tiles_id') WHERE (SELECT id FROM Tiles WHERE id = NEW.id) IS NULL; END 

CREATE TRIGGER fku_TilesData_id_Tiles_id BEFORE UPDATE ON [TilesData] FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table TilesData violates foreign key constraint fku_TilesData_id_Tiles_id') WHERE (SELECT id FROM Tiles WHERE id = NEW.id) IS NULL; END 

CREATE TRIGGER fkdc_TilesData_id_Tiles_id BEFORE DELETE ON Tiles FOR EACH ROW BEGIN DELETE FROM TilesData WHERE TilesData.id = OLD.id; END 

Voici l'opération d'insertion:

INSERT INTO Tiles(X, Y, Zoom, Type,Date) VALUES(?, ?, ?, ?,?); 
INSERT INTO TilesData(id, Tile) VALUES((SELECT last_insert_rowid()), ?); 

Voici l'opération de lecture:

SELECT Tile FROM TilesData WHERE id = (SELECT id FROM Tiles WHERE X=%1 AND Y=%2 AND Zoom=%3 AND Type=%4) 

Le problème est, lorsque la base de données est faible la lecture est toujours très rapide (environ 20ms), mais lorsque la base de données devient plus grande (environ 15000 lignes), l'accès en lecture devient très lent (environ 4000ms). Est-ce que je fais quelque chose de mal? Des suggestions pour améliorer la performance?

Répondre

2

si vous voulez pour Android Vous pouvez également utiliser la solution noSQL pour la vitesse. Par exemple Couchbase

+0

Malheureusement je travaille sur Windows ... – Nyaruko

+0

regardez, nosql [MongoDB] (https://www.mongodb.org/) est très la vitesse plus de SQL, ou d'autres SQL, Par ex MySQL, PostgreSQL, Oracle, etc SQlite conçu pour peu de données. –