数据仓库服务 GAUSSDB(DWS)-语句下推调优:不支持下推的函数
不支持下推的函数
首先介绍函数的易变性。在 GaussDB (DWS)中共分三种形态:
- 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如果出现CTE中,也不下推。因为这种场景下推可能出现结果错误。
对于用户自定义函数,可以在创建函数的时候指定provolatile和proshippable属性的值,详细请参考CREATE FUNCTION。
对于函数不能下推的场景:
- 如果是系统函数,建议根据业务等价替换这个函数。
- 如果是自定义函数,建议分析客户业务场景,看函数的provolatile和proshippable属性定义是否正确。
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- GaussDB(for MySQL)并行查询_GaussDB(for MySQL)内核_GaussDB(for MySQL)并行执行_PQ
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GaussDB数据库参数调优_GaussDB版本_高斯数据库参数调优
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- GaussDB性能怎么调_GaussDB性能调优_高斯数据库性能怎么调-华为云
- mysql数据库入门_mysql数据库备份命令_mysql数据库导出
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略