Geoserver创建缓慢的PSQL查询

时间:2019-02-28 20:17:53

标签: gis psql geoserver

我在使用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')

查询在约1秒内完成。有什么方法可以“优化” GeoServer编写查询的方式吗?

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

谢谢!

编辑:

删除ID为null的行,向PSQL内的列添加NOT NULL语句,然后重新加载GeoServer内的图层,从查询中删除"id" IS NOT NULL,查询时间是其使用时间的一半可以,但还不够好。它确实应该只是一个简单的IN查询。

1 个答案:

答案 0 :(得分:0)

将PSQL升级到10.2可以解决此问题,该索引仍未在OR查询中使用,但速度快了10倍。