什么表现更好?
我有一张包含以下内容的表:
id BIGSERIAL,
geog GEOGRAPHY,
longitude DOUBLE PRECISION,
latitude DOUBLE PRECISION,
area GEOGRAPHY
geog
由ST_MakePoint(longitude, latitude)
生成。我可以在需要geog
和ST_X
时从ST_Y
中提取经度和纬度,但我不知道是否只记录经度和纬度以供重复使用和查询更好性能
geog
和area
用于计算结果,例如最近,重叠等项目。客户通常只需要过滤项目列表和lon / lat。
运行一些测试后,看起来存储lon / lat的速度稍快一些(对于我的有限数据集)。我跑了几次,结果有利于存储。
存储lon / lat
explain analyze
select
longitude,
latitude
from location;
-- 'Seq Scan on location (cost=0.00..3.04 rows=104 width=16) (actual time=0.013..0.032 rows=104 loops=1)'
-- 'Planning time: 0.062 ms'
-- 'Execution time: 0.047 ms'
使用ST_X& ST_Y
explain analyze
select
st_y(geog::geometry),
st_x(geog::geometry)
from location;
-- 'Seq Scan on location (cost=0.00..4.08 rows=104 width=16) (actual time=0.026..0.192 rows=104 loops=1)'
-- 'Planning time: 0.064 ms'
-- 'Execution time: 0.224 ms'
是否有更快的替代ST_X和ST_Y?我认为人们需要从地理类型中获取经度和纬度是相当普遍的。