postgre范围查询
有个需求 根据前端传来的点和距离 查询 该范围内的数据 和返回距离
一开始是这样写的
select * ,st_distance('${前端传来的wkt}'::geography,${空间字段}::geography) as "与目标距离" from 表 where st_dwithin('${前端传来的wkt}'::geography,空间字段::geography,${距离}) = 't'
但是这样子查比较慢
后面找了另外的方式,稍微快一些
select * ,st_distance('${点}'::geography,${空间字段}::geography) as "与目标距离" from 表 where st_intersects(${空间字段},st_buffer('${前端传来的wkt}'::geography,'${距离}')::geometry) = 't'
下面的比上面的快一倍以上,数据量增大 差距还会进一步拉大,用十几万条数据测试,差距在十倍左右,不过那条sql和这个稍微有些不同
经过我一顿研究分析(百度),我认为两个sql的差距出在 类型转换上,数据库存的是geometry类型,但是要计算米,需要转换为geography类型,这两个类型转换应该是比较消耗时间的

浙公网安备 33010602011771号