我正在构建一个应用程序,服务器需要根据某些标准/过滤器选择行。其中之一是用户的位置和用户希望查看帖子的半径以及其他过滤器,例如日期范围和过滤器以获取另一列的值。这将用于临时事件发现应用程序。
我已阅读有关 PostGIS 的信息,并且知道有一种point
数据类型。基于这个答案,我明白最好从相等列到范围列排序,即使我觉得地理点列应该是第一个。但主要问题是,如何创建这样的索引?我考虑过 GiST 索引,但不确定是否有帮助。
假设如下简化事件表(忽略有效位置数据):
id event_title event_position event_type is_public start_date
(varchar) (point lat/lon) (smallint) (boolean) (timestamptz)
-- --------------------------- --------------- --------- --------- ----
1 "John's Party" (122,35) 0 0 2020-07-05
2 "Revolution then Starbucks" (123,30) 1 1 2020-07-06
3 "Study for math exam" (120,36) 2 1 2020-07-07
4 "Party after exam" (120,36) 1 1 2020-07-08
5 "Hiking next to the city" (95,40) 3 1 2020-07-09
6 "Football match" (-42,31) 4 1 2020-07-10
因此,在此表中,用户将能够查询接近 (122,34) 距离为 100 公里的公共事件(假设前三行属于该区域)以及事件类型 0、1 或 2 介于日期 2020-07-05 和2020-07-07。用户将获得 ID 为 2 和 3 的行。
这是我想用适当的索引优化的查询。谢谢!