当我在视图中使用 unnest() 并在 select 语句中使用该视图时,Greenplum 似乎无法仅搜索预期的分区并搜索主表的所有分区。当使用子查询而不是视图时,同样的事情也适用。
例如:
Select something from (select unnest(an_array_field) from table_y)
where date = 'somedate' and state = 'somestate'
我们目前有 2 个不同的服务器运行 2 个不同版本的 Greenplum。服务器 A 在旧版本 (4.2.1) 上运行,而服务器 B 在 4.2.3 上运行。运行上面相同的查询会产生不同的结果。服务器 A(旧)将在几秒钟内返回查询,而服务器 B(新)将永远返回。运行查询的解释表明服务器 A 仅对其中一个分区进行扫描(在 where 子句中包含日期和状态),而服务器 B 将对每个分区进行扫描,从而导致运行缓慢。
两个 DB 的表结构相同。运行没有嵌套的查询不会有问题。所以,我怀疑与新版本有关。我能做些什么来解决这个问题吗?