我使用渗透模式将荷兰的OpenStreetMap数据加载到PostGIS数据库(PostgreSQL 8.3 / PostGIS 1.3.3)中。这意味着所有标签都存储在hstore字段中。除了渗透在几何字段上创建的GIST索引之外,我还在标签字段上创建了另一个GIST索引。
尝试同时使用空间约束和标签字段约束进行查询时,我发现它比我想要的要慢。这样的查询:
SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n
INNER JOIN users AS u ON n.user_id = u.id
WHERE tags->'man_made'='surveillance'
AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326));
需要22秒才能返回78条记录。
该表中有大约5300万条记录。
有没有办法大大加快这一步?我听说hstore在PostgreSQL 9中的实现明显更好,升级是否有帮助?