首页 文章

Oracle DETERMINISTIC HINT开销

提问于
浏览
1

DETERMINISTIC HIT(如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将开始缓存来自相同输入的所有结果 .

当然,这是一个很棒的结果,只是在函数声明上添加一个简单的世界, but what is the side effect of an intensive use of this? For example, if this function is called million of times with different input ?

我可以使用DETERMINISTICT等许多其他功能:

  • AN DETERMINISTIC函数用于计算两个给定日期之间的差异(在DAYS中)

ECC

1 回答

  • 1

    documentation says

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

    优化器 can 使用前面的结果,但是没有承诺它总会得到相同的结果 . 这并不一定意味着函数结果可以在查询之间缓存,尽管它们可能被其他机制缓存(我认为) .

    当Oracle确实缓存内容时,它会管理缓存大小以保持在可用内存中,并优化可用于各种功能的内存 . 假设你正确使用它,基本上你不需要担心使函数确定性的副作用 .

    还有更多documentation here,包括它与基于函数的索引等的关系 .

相关问题