Geoserver创建缓慢的PSQL查询

问题描述 投票:1回答:1

我在使用Geoserver + PostGIS时遇到了一些缓慢的问题。过滤图层需要花费大量时间让Geoserver渲染图块。

例如,我有一个需要显示的ID数组,所以我做了一个CQL_FILTER

CQL_FILTER="id IN ('1', '2')"

我已经检查了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 )

当然我需要查询数百个ID,PSQL查询大约需要30秒才能完成。但是,如果我只是做这个查询:

SELECT "objectid",encode(ST_AsBinary(ST_Force2D("the_geom")),'base64') as "the_geom" FROM "public"."table" WHERE id IN ('1', '2')

查询在~1s内完成。有没有办法“优化”GeoServer写入查询的方式?

我尝试通过增加缓存大小,优化M2 SSD和预热来优化PSQL服务器

谢谢!

编辑:

删除ID为null的行,将NOT NULL语句添加到PSQL内的列并重新加载GeoServer中的层,从查询中删除了"id" IS NOT NULL,查询时间是以前的一半,但它仍然不够好。它应该只是一个简单的IN查询。

gis psql geoserver
1个回答
0
投票

将PSQL升级到10.2修复了这个问题,索引仍未在OR查询中使用,但速度提高了10倍。

© www.soinside.com 2019 - 2024. All rights reserved.