Что лучше работает?
У меня есть таблица, содержащая:
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
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? Я думаю, что для людей было бы достаточно часто брать широту и долготу от типа географии.