DWS自定义函数不下推优化
【摘要】 1、函数属性创建函数的时候,可以指定函数属性,与函数下推相关的属性为易失性级别 和下推属性易失属性:IMMUTABLE:该属性的函数不会修改数据库,并且保证在任何情况下同样的输入参数永远返回同样的结果;IMMUTABLE属性是一定能下推到DN执行的,不管下推属性是否为SHIPPABLESTABLE:该属性的函数不会修改数据库,并且保证在同一个查询中,对于同样的输入参数,函数返回的结果相同;是...
1、函数属性
创建函数的时候,可以指定函数属性,与函数下推相关的属性为易失性级别 和下推属性
易失属性:
-
IMMUTABLE:该属性的函数不会修改数据库,并且保证在任何情况下同样的输入参数永远返回同样的结果;IMMUTABLE属性是一定能下推到DN执行的,不管下推属性是否为SHIPPABLE
-
STABLE:该属性的函数不会修改数据库,并且保证在同一个查询中,对于同样的输入参数,函数返回的结果相同;是否下推DN由SHIPPABLE属性决定
-
VOLATILE:该属性的函数对于同样的输入参数,函数的返回结果可能不同,典型的如timeofday;是否下推DN由SHIPPABLE属性决定
下推属性:
-
SHIPPABLE:函数可以下推到DN执行
-
NOT SHIPPABLE:函数不能下推到DN执行
注意:创建函数时如果未明确指定,则默认为NOT SHIPPABLE
重要:用户在使用GaussDB(DWS)时,应该正确指定函数属性,错误指定函数属性不仅会导致查询语句执行效率低,而且可能会导致结果集不稳定的情况
2、不下推函数优化
如果函数中有insert/update/delete操作,则无法把函数改成下推的
2.1 函数属性指定为SHIPPABLE
注意,如果函数不满足SHIPPABLE定义,不要指定为SHIPPABLE。
ALTER FUNCTION func(x,y) IMMUTABLE; -- 易失属性指定为IMMUTABLE,下推属性一定是SHIPPABLE的
ALTER FUNCTION func(x,y) SHIPPABLE;
2.2 函数中的表使用复制表
注意,仅当函数中的表都比较小的时候,可以这样优化,否则可能会导致其他性能问题。
ALTER TABLE t distribute by replication;
3、其他建议
-
建议自定义函数中不要有表的操作
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)