如何在PostgresSQL 8.3中创建索引,使得有序的边界框查询有效?我正在查询的表有很多行。
这就是我想要的创建索引使得以下查询尽可能高效:
SELECT * FROM features
WHERE lat BETWEEN ? AND ?
AND lng BETWEEN ? AND ?
ORDER BY score DESC
功能表如下所示:
Column | Type |
------------+------------------------+
id | integer |
name | character varying(255) |
type | character varying(255) |
lat | double precision |
lng | double precision |
score | double precision |
html | text |
答案 0 :(得分:1)
要在点属性上创建GiST索引,以便我们可以有效地对转换函数的结果使用box运算符:
CREATE INDEX pointloc
ON points USING gist (box(location,location));
SELECT * FROM points
WHERE box(location,location) && '(0,0),(1,1)'::box;
http://www.postgresql.org/docs/9.0/static/sql-createindex.html
这是9.0文档中的示例。它应该适用于8.3,因为这些功能已经存在了很长时间。
答案 1 :(得分:0)
您可以尝试使用GiST index来实现R-Tree。这种类型的索引记录很少,因此您可能需要遍历源代码分发中的示例代码。
(注意:我之前使用R-Tree索引的建议似乎已过时;不推荐使用。)
答案 2 :(得分:0)
听起来你想看看PostGIS,一个用于空间数据类型和查询的PostgreSQL模块。它支持使用GiST索引进行快速查找。不幸的是,由于我自己没有使用过PostGIS,因此无法进一步指导您。