慢速复制虚拟表rtree

时间:2014-06-26 08:31:16

标签: database sqlite

从文件系统中将代码复制到内存数据库中。

在对复制过程进行一些测量之后,结果是虚拟表需要大量时间。我的假设是它与影子表有关。

首先是结果:

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");

现在我的问题是:"是否有机会获得更好的表现"

1 个答案:

答案 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;