Ganos在时空索引框架基础上进行的深度优化,可减少时空查询中额外的数据I/O及计算开销。
背景信息
时空引擎传统的查询都是经典的两阶段查询处理方法(粗糙集过滤和精确过滤),首先利用时空多维索引进行粗糙集过滤,筛选出来的中间结果集再经过精确函数判断,得到最终的结果集。
示例
先利用test表上的空间索引与查询对象进行粗过滤,得到中间结果集ID,根据中间结果集ID再取出实际的记录数据,利用st_intersects进行精确过滤,最终得到符合条件的记录集。
这其中,利用空间索引进行粗糙集过滤后,依旧有大量无关的对象需要进入到精确过滤阶段,一方面带来数据I/O开销,另一方面由于精确过滤计算过于复杂,会带来大量无用计算。
select id from test where st_intersects(ST_GeomFromText('POLYGON((250000 -268000, 250000 270000, 280000 270000,280000 -268000, 250000 -268000))', 3857),geom)=true;
两阶段查询优化
两阶段查询优化对于时空范围查询、PIP(point in polygon)查询等场景有较大的性能提升,该优化由RDS PostgreSQL中的guc参数控制,对用户使用透明,当前默认为关闭状态。
在数据库session中开启或关闭查询优化的命令如下:
-- 开启
SET rds_enable_gist_refine = true;
-- 关闭
SET rds_enable_gist_refine = false;
文档内容是否对您有帮助?