从文件系统中将代码复制到内存数据库中。
在对复制过程进行一些测量之后,结果是虚拟表需要大量时间。我的假设是它与影子表有关。
首先是结果:
Attached to database on file system in 7 milliseconds.
Created in-memory table-1 in 2 milliseconds.
Created in-memory table-2 in 2 milliseconds.
Copied table-1 in 2953 milliseconds.
Copied table-2 in 3086 milliseconds.
Create in-memory coordinates table in 4 milliseconds.
Copied coordinates table in 78813 milliseconds.
Detached from database on file system in 12 milliseconds.
Completed time was 84880 milliseconds.
硬盘上的表格方案如下所示:
CREATE VIRTUAL TABLE coordinates USING rtree(
id,
min_latitude,
max_latitude,
min_longitude,
max_longitude,
);
复制过程在Java中如下所示:
statement = connection.createStatement();
statement.execute("ATTACH '" + databasePath + "' AS fs");
statement.execute("CREATE VIRTUAL TABLE mCoordinates USING rtree(id, min_latitude, max_latitude, min_longitude, max_longitude)");
statement.execute("INSERT INTO mCoordinates (id, min_latitude, max_latitude, min_longitude, max_longitude) SELECT id, min_latitude, max_latitude, min_longitude, max_longitude FROM fs.coordinates");
现在我的问题是:"是否有机会获得更好的表现"
答案 0 :(得分:0)
从头开始构建150,000个R-tree条目只需要一些时间。
但是,如果两个数据库的页面大小相同,则只需复制影子表的内容:
BEGIN;
DELETE FROM mCoordinates_node;
INSERT INTO mCoordinates_node SELECT * FROM fs.coordinates_node;
INSERT INTO mCoordinates_parent SELECT * FROM fs.coordinates_parent;
INSERT INTO mCoordinates_rowid SELECT * FROM fs.coordinates_rowid;
COMMIT;