Разница в производительности для извлечения lon / lat из географии против полей долготы и широты - PullRequest
0 голосов
/ 04 мая 2018

Что лучше работает?

У меня есть таблица, содержащая:

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

...