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类型,这两个类型转换应该是比较消耗时间的

 

posted @ 2023-01-17 10:30  霸王龙168  阅读(175)  评论(0)    收藏  举报