DWS自定义函数不下推优化

举报
漫天 发表于 2023/10/18 15:54:23 2023/10/18
【摘要】 1、函数属性创建函数的时候,可以指定函数属性,与函数下推相关的属性为易失性级别 和下推属性易失属性:IMMUTABLE:该属性的函数不会修改数据库,并且保证在任何情况下同样的输入参数永远返回同样的结果;IMMUTABLE属性是一定能下推到DN执行的,不管下推属性是否为SHIPPABLESTABLE:该属性的函数不会修改数据库,并且保证在同一个查询中,对于同样的输入参数,函数返回的结果相同;是...

1、函数属性

创建函数的时候,可以指定函数属性,与函数下推相关的属性为易失性级别下推属性

易失属性:

  • IMMUTABLE:该属性的函数不会修改数据库,并且保证在任何情况下同样的输入参数永远返回同样的结果;IMMUTABLE属性是一定能下推到DN执行的,不管下推属性是否为SHIPPABLE

  • STABLE:该属性的函数不会修改数据库,并且保证在同一个查询中,对于同样的输入参数,函数返回的结果相同;是否下推DN由SHIPPABLE属性决定

  • VOLATILE:该属性的函数对于同样的输入参数,函数的返回结果可能不同,典型的如timeofday;是否下推DN由SHIPPABLE属性决定

注意:创建函数时如果未明确指定,则默认为VOLATILE

下推属性:

  • 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、其他建议

  • 建议自定义函数中不要有表的操作

  • 建议无法下推的自定义函数改成存储过程,存储过程中的sql可以下推,性能应该会提升一点

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。