Я испытываю некоторую медлительность с Geoserver + PostGIS.Фильтрация слоя требует от Geoserver огромного количества времени для рендеринга плиток.
Например, у меня есть массив идентификаторов, которые необходимо показать, поэтому я создаю CQL_FILTER, например
CQL_FILTER="id IN ('1', '2')"
IЯ проверил регистратор запросов в PSQL, и запрос выглядит так:
SELECT "objectid",encode(ST_AsBinary(ST_Force2D("the_geom")),'base64') as "the_geom" FROM "public"."table" WHERE ((("id" = '1' AND "id" IS NOT NULL ) OR ("id" = '2' AND "id" IS NOT NULL )
Конечно, мне нужно запросить сотни идентификаторов, и запрос PSQL занимает около 30 секунд.Но если я просто сделаю этот запрос:
SELECT "objectid",encode(ST_AsBinary(ST_Force2D("the_geom")),'base64') as "the_geom" FROM "public"."table" WHERE id IN ('1', '2')
, запрос завершится через ~ 1 с.Есть ли способ «оптимизировать» способ, которым GeoServer записывает запросы?
Я пытался оптимизировать сервер PSQL путем увеличения размеров кэша, оптимизации для M2 SSD и предварительного прогрева
Спасибо!
Редактировать:
Удаление строк с нулевым идентификатором, добавление оператора NOT NULL
в столбец внутри PSQL и перезагрузка слоя внутри GeoServer удалили "id" IS NOT NULL
из запроса, и время запроса равнополовина того, что было раньше, но все еще недостаточно.Это действительно должен быть простой запрос IN
.