I have a database with the following schema:

CREATE TABLE mapelements (ID INTEGER PRIMARY KEY NOT NULL, TYPECODE 
INTEGER,NAME TEXT,LAT INTEGER,LON INTEGER,SWLAT INTEGER,SWLON INTEGER,NELAT 
INTEGER,NELON INTEGER,POLY BLOB,TILE INTEGER);
CREATE VIRTUAL TABLE mapelements_rtree USING rtree(ID,SWLAT,NELAT,SWLON,NELON);
CREATE TABLE "mapelements_rtree_node"(nodeno INTEGER PRIMARY KEY, data BLOB);
CREATE TABLE "mapelements_rtree_parent"(nodeno INTEGER PRIMARY KEY, parentnode 
INTEGER);
CREATE TABLE "mapelements_rtree_rowid"(rowid INTEGER PRIMARY KEY, nodeno 
INTEGER);
CREATE INDEX mapelements_bbox ON mapelements(SWLAT,NELAT,SWLON,NELON);
CREATE INDEX mapelements_latlon ON mapelements(LAT,LON);
CREATE INDEX mapelements_name ON mapelements(NAME COLLATE NOCASE);
CREATE INDEX mapelements_nelat ON mapelements(NELAT);
CREATE INDEX mapelements_nelon ON mapelements(NELON);
CREATE INDEX mapelements_swlat ON mapelements(SWLAT);
CREATE INDEX mapelements_swlon ON mapelements(SWLON);
CREATE INDEX mapelements_tile ON mapelements(TILE);

The database contains 2653693 rows, and is approximately 830MBytes big
without the rtree index, and approximately 970MBytes with the rtree
index.

I have created the rtree index with the following script:
CREATE VIRTUAL TABLE mapelements_rtree USING rtree(ID,SWLAT,NELAT,SWLON,NELON);
INSERT INTO mapelements_rtree SELECT ID,SWLAT,NELAT,SWLON,NELON FROM 
mapelements;
analyze;
vacuum;

The following query is very quick, it returns 20 rows within a small fraction 
of a second:
select * from mapelements_rtree where NELAT>=79000000 and SWLAT<=80000000 and 
NELON>=79000000 and SWLON<=80000000;

The following query, however, takes a long time (almost half a minute):
select * from mapelements,mapelements_rtree where 
mapelements_rtree.NELAT>=79000000 and mapelements_rtree.SWLAT<=80000000 and 
mapelements_rtree.NELON>=79000000 and mapelements_rtree.SWLON<=80000000 and 
mapelements.ID=mapelements_rtree.ID;

This is basically how the rtree documentation suggests to perform
selects. Why is this query so slow, and what can I do to fix/workaround
this?

Thanks,
Tom


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to