Oracle确定性提示开销

薄雾83

确定性命中(如Oracle所说)用于缓存函数的结果(如果可以确定的话),但是这种好处的开销是多少?

我将尝试更好地解释这一点:

CREATE OR REPLACE FUNCTION betwnstr (
   string_in   IN   VARCHAR2
 , start_in    IN   INTEGER
 , end_in      IN   INTEGER
)
   RETURN VARCHAR2 DETERMINISTIC
IS
BEGIN
   RETURN (SUBSTR (string_in, start_in, end_in - start_in + 1));
END;
/

这个简单的函数从给定字符串的BEGIN和END索引中提取字符。

现在,我将开始在不同的表中使用此函数作为SELECT结果(其他函数,过程,程序包等),Oracle将开始从同一输入中缓存所有结果。

当然,仅在函数声明上添加一个简单的世界,这是一个奇妙的结果,但是大量使用此函数的副作用是什么?例如,如果此函数在不同的输入条件下被调用了百万次?

我可以将DETERMINISTICT用作其他许多功能,例如:

  • DETERMINISTIC函数,用于计算与两个给定日期之间的差异(以天为单位)

等等

亚历克斯·普尔

文件说

确定性

告诉优化器函数以相同的参数值调用时返回相同的值(如果不正确,则指定DETERMINISTIC会导致不可预测的结果)。如果先前使用相同的参数值调用了该函数,则优化器可以使用先前的结果,而不用再次调用该函数。

优化器可以使用先前的结果,但是没有。这只是断言,如果需要针对相同的参数值多次调用它(通常在单个查询中),则可以选择仅进行一次调用,因为已向您保证它将始终获得相同的结果。这不一定意味着函数结果可以缓存在查询之间的某个地方,尽管它们可能被其他机制缓存(我认为)。

当Oracle进行缓存时,它会管理缓存大小以保留在可用内存中,并优化各种功能可用的内存。基本上,假设您正确使用了函数,则无需担心确定性函数的副作用。

这里有更多文档,包括与基于函数的索引等的关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章