高效的有序排序边框查询

时间:2011-03-30 21:35:41

标签: sql performance postgresql indexing gis

如何在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                   | 

3 个答案:

答案 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,因此无法进一步指导您。