sqlite对地图图块执行速度很慢

时间:2015-04-03 06:42:20

标签: sqlite

这是我第一次使用sqlite,我编写了一个简单的数据库来存储和检索地图图块。 这是sqlite数据库:

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

这是插入操作:

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

这是读操作:

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

问题是,当数据库很小时,读取仍然非常快(大约20ms),但是当数据库变得更大(大约15000行)时,读访问变得非常慢(大约4000ms)。 我做错了吗?有任何改善表现的建议吗?

1 个答案:

答案 0 :(得分:2)

如果你想要Android你也可以使用noSQL解决方案来提高速度。例如Couchbase