【发布时间】:2019-02-28 20:17:53
【问题描述】:
我在使用 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 的行,将 NOT NULL 语句添加到 PSQL 内的列并重新加载 GeoServer 内的层从查询中删除了 "id" IS NOT NULL,查询时间是以前的一半,但是它仍然不够好。它真的应该只是一个简单的IN 查询。
【问题讨论】: