GPORCA的限制
在Greenplum数据库中使用默认的GPORCA优化器时有一些限制。GPORCA和传统的查询优化器当前并存于Greenplum数据库中,因为GPORCA不支持所有的Greenplum数据库特性。
这一节描述这些限制。
Parent topic: 关于GPORCA
不支持的SQL查询特性
下面这些是GPORCA被启用时(默认启用)不支持的特性:
- 索引表达式(在基于表的一个或者更多列的表达式上定义的索引)
- GIN索引方法。GPORCA只支持B树、位图和Gist索引。GPORCA忽略使用不支持的方法创建的索引。
- 外部参数
- 这些类型的分区表:
- 非统一分区表。
- 被修改为用一个外部表作为叶子子分区的分区表。
- SortMergeJoin (SMJ).
- 有序聚集
- 这些分析扩展:
- CUBE
- 多分组集
- 这些标量操作符:
- ROW
- ROWCOMPARE
- FIELDSELECT
- 将集合运算符作为输入参数的聚合函数。
- percentile_*窗口函数(Greenplum数据库不支持有序集聚合函数)。
- 逆分布函数
- 执行用ON MASTER或 ON ALL SEGMENTS属性定义的函数的查询。
- 在元数据名称(如表名)中包含Unicode字符的查询,以及字符与主机系统区域设置不兼容。
- 表名由关键字ONLY指定的SELECT,UPDATE和DELETE命令。
- 按列排序规则。只有当查询中的所有列都使用时,GPORCA才支持排序规则相同的排序规则。如果查询中的列使用不同的排序规则,Greenplum则使用传统查询计划器。
性能衰退
启用GPORCA时,已知下列特性会发生性能衰退:
- 短查询 - 对于GPORCA,短查询可能会因为GPORCA对于判断最优查询执行计划的增强而遇到额外的负担。
- ANALYZE - 对于GPORCA,ANALYZE命令为分区表生成根分区的统计信息。对于传统优化器,这些统计信息不会被生成。
- DML操作 - 对于GPORCA,DML增强包括在分区和分布键上的更新支持,这可能会产生额外的负担。
此外,GPORCA使用这些特性执行SQL语句时,以前版本特性的增强功能可能会导致额外的时间。