首页 > 解决方案 > Geoserver 创建缓慢的 PSQL 查询

问题描述

我在使用 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查询。

标签: gispsqlgeoserver

解决方案


将 PSQL 升级到 10.2 解决了这个问题,索引仍然没有用于 OR 查询,但它快了 10 倍。


推荐阅读