我在使用Geoserver + PostGIS时遇到了一些问题。过滤图层需要Geoserver渲染瓷砖花费大量时间。
例如,我有一个需要显示的ID数组,因此我制作了
这样的CQL_FILTERCQL_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
查询。
答案 0 :(得分:0)
将PSQL升级到10.2可以解决此问题,该索引仍未在OR查询中使用,但速度快了10倍。