Чтобы узнать, можно ли оптимизировать запрос с помощью индексов, проще всего сделать то, что говорит всплеск.
Создайте GIST INDEX и используйте EXPLAIN или EXPLAIN VERBOSE перед запросом, чтобы увидеть план выполнения, который использует postgres. Если вы видите что-то вроде SCAN SEQ , тогда не с использованием индекса. Если вы видите INDEX SCAN , тогда равен , используя индекс для этого конкретного запроса.
Чтобы использовать индексы для данных ГИС, вы должны использовать функции, которые используют ограничивающую рамку geom / geog. В Postgis есть функции, которые используют ограничивающие рамки для использования индексов, как и все операторы , или некоторые функции, которые используют операторы внутри для фильтрации.
Я думаю, что лучший запрос, который вы могли бы задать, чтобы убедиться, что lonlat находится в коробке (это то, что вы пытаетесь сделать?), Это:
SELECT *
FROM locations
WHERE
ST_Dwithin(
'POINT('||(longitude*46)||' '||(latitude*69)||')'::geometry,
'POINT(8970 3036)'::geometry
)
(не проверено, но должно работать и с индексами)