gis - 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
查询。
解决方案
将 PSQL 升级到 10.2 解决了这个问题,索引仍然没有用于 OR 查询,但它快了 10 倍。
推荐阅读
- php - 当定义条件时,用tableB的idcolumn更新tableA的列
- python - RuntimeError: 给定组=1,大小为 [64, 3, 3, 3] 的权重,预期输入 [4, 5000, 5000, 3] 有 3 个通道,但有 5000 个通道
- r - 如何在 r 编程中从 50+ 级的巨大因子变量中创建因子?
- python - 如何根据变量在列表中创建 X 元素?
- reactjs - 如何在可视代码中评论 reactjs 标记代码?
- python - 日期时间索引的日期偏移量为“7d”的滚动窗口以相反的顺序排序
- c++ - gcc 是否错过了优化 ctor 初始化程序列表的机会?
- c++ - lua5.3 dll 文件中缺少名称
- reactjs - 我的日期功能不适用于 Firefox,但适用于 chrome
- django - Django:如何在新模板中的另一个模型上使用 CreateView 的 form_valid() 返回的响应?