PG 如何创建包含地理位置信息和其他字段的复合索引?

2016-08-31 11:00:00 +08:00
 id4alex
sorry 不好意思暂时不知道把这个挪到什么节点下面去。暂时挂在 mysql 下面把。


最近有个场景有地理位置的需求,所以试用了下 PG, 关于这块不太熟悉.


表 DDL:
CREATE TABLE test
(
longid bigint NOT NULL DEFAULT nextval('test_longid_seq'::regclass),
longitude double precision,
latitude double precision,
create_ts_long bigint,
CONSTRAINT test_pkey PRIMARY KEY (longid)
)

如果仅仅是创建关于地理位置信息的索引,如下操作可以解决。
CREATE INDEX ll_idx
ON test USING gist
(ll_to_earth(latitude ::double precision, longitude ::double precision))
TABLESPACE pg_default;

但是有这样一个场景,筛选出在具体时间段内距离最近的记录, 这种情况下应该如何创建复合索引?


先拜谢了!
2045 次点击
所在节点    MySQL
2 条回复
lazyCoder
2016-08-31 11:31:54 +08:00
pg 是 postgresql 么?

创建复合索引不就是这样么
create index index_name on table_name on (c1,c2);
id4alex
2016-08-31 14:00:59 +08:00
@lazyCoder 复合索引包含 ll_to_earth(latitude ::double precision, longitude ::double precision),再加上 timestamp 作为索引。 看起来似乎有点麻烦。

我现在想切换成 geohash 来做吧, 似乎成本更低。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302865

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX