Пытаюсь увеличить скорость обработки следующего пространственного запроса:
SELECT
osm_id,
name,
ST_DISTANCE(geometry, ST_SetSRID(ST_POINT(37.72308, 55.47957), 4326), true) as dist
FROM
roads
WHERE
ST_DWithin(geometry, ST_SetSRID(ST_POINT(37.72308, 55.47957), 4326), 1) ORDER BY dist LIMIT 1;
Запрос выполняется на небольшой территории 7.5 секунд.
Структура таблицы roads следующая:
newdb=# \d roads
Table "public.roads"
Column | Type | Modifiers
----------+---------------------------+----------------------------------------------------
id | integer | not null default nextval('roads_id_seq'::regclass)
osm_id | bigint |
type | character varying |
name | character varying |
tunnel | smallint |
bridge | smallint |
oneway | smallint |
ref | character varying |
z_order | integer |
access | character varying |
service | character varying |
class | character varying |
geometry | geometry(LineString,4326) |
Indexes:
"roads_pkey" PRIMARY KEY, btree (id)
"roads_geography" gist (geometry)
"roads_geom" gist (geometry)
Тут видно что существует пространсвенный индекс geometry. Вопрос -- в терминологии PostgreSQL geometry и geography это одно и тоже или нет? Если нет, то как создать именно географический индекс?
Как можно увеличить скорость выполнения данного запроса?