我似乎找不到关于这个问题的详细文档。 创建一个支持类似以下查询的postgres数据库/表的最简单方法是什么?SELECT * FROM table WHERE distance(POINT(0,0), table.location) <= 1000m; 其中POINT(0,0)和table.location应该是纬度/经度对,1000m是1000米。如何为该表建立索引? 谢谢。
我似乎找不到关于这个问题的详细文档。 创建一个支持类似以下查询的postgres数据库/表的最简单方法是什么?SELECT * FROM table WHERE distance(POINT(0,0), table.location) <= 1000m; 其中POINT(0,0)和table.location应该是纬度/经度对,1000m是1000米。如何为该表建立索引? 谢谢。
PostgreSQL支持在表达式上创建索引,也支持部分索引,你可能可以将它们混合使用。
这只是一个随机猜测,我不知道它是否有效,但可以试试:
CREATE INDEX foobar ON table (distance(POINT(0,0), location))
WHERE distance(POINT(0,0), location) <= 1000;
http://www.postgresql.org/docs/9.0/interactive/indexes-expressional.html
http://www.postgresql.org/docs/9.0/interactive/indexes-partial.html
http://www.postgresql.org/docs/9.0/interactive/earthdistance.html