云数据库 GAUSSDB-语句下推调优:不支持下推的函数
不支持下推的函数
首先介绍函数的易变性。在 GaussDB 中共分三种形态:
- IMMUTABLE
表示该函数在给出同样的参数值时总是返回同样的结果。
- STABLE
表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。
- VOLATILE
表示该函数值可以在一次表扫描内改变,因此不会做任何优化。
函数易变性可以查询pg_proc的provolatile字段获得,i代表IMMUTABLE,s代表STABLE,v代表VOLATILE。另外,在pg_proc中的proshippable字段,取值范围为t/f/NULL,这个字段与provolatile字段一起用于描述函数是否下推。
- 如果函数的provolatile属性为i,则无论proshippable的值是否为t,则函数始终可以下推。
- 如果函数的provolatile属性为s或v,则仅当proshippable的值为t时,函数可以下推。
- random,exec_hadoop_sql,exec_on_extension如果出现CTE中,也不下推。因为这种场景下下推可能出现结果错误。
对于用户自定义函数,可以在创建函数的时候指定provolatile和proshippable属性的值,详细请参考CREATE FUNCTION。
对于函数不能下推的场景:
- 如果是系统函数,建议根据业务等价替换这个函数。
- 如果是自定义函数,建议分析客户业务场景,看函数的provolatile和proshippable属性定义是否正确。
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- GaussDB(for MySQL)并行查询_GaussDB(for MySQL)内核_GaussDB(for MySQL)并行执行_PQ
- GaussDB监控_GaussDB数据库监控_高斯数据库监控_华为云
- GaussDB查询表结构_通配符字段查询表_高斯数据库查询表结构-华为云
- 云数据库mysql_云上数据库_SQL云数据库_SQLserver
- GaussDB性能_性能统计_高斯数据库性能-华为云
- GaussDB分析_GaussDB数据库分析_高斯数据库分析_华为云
- GaussDB硬件_金融级高可用_高斯数据库硬件-华为云
- mysql数据库入门_mysql数据库备份命令_mysql数据库导出