确定性函数和非确定性函数有什么区别?
我希望确定性会使 DBMS 认为该函数是干净的并缓存其结果?
DETERMINISTIC函数子句非常适合没有任何非确定性组件的函数。这意味着每次为函数提供相同的参数值时,结果都是相同的。当您定义一个函数时,您可以简单地将DETERMINISTIC选项添加到声明部分,确保函数(或它调用的任何函数或过程)不依赖于会话变量或模式对象的状态,因为结果可能因调用而异。此选项指示优化器在遇到先前计算的结果时可以使用缓存的结果。
资源
create function det() returns INTEGER DETERMINISTIC NO SQL return @param;
create function ndet() returns INTEGER NOT DETERMINISTIC NO SQL return @param;
select
@param:=5, det() d1, ndet() n1
, @param:=3, det() d2, ndet() n2
, @param:=1, det() d3, ndet() n3
, @param:=7, det() d4, ndet() n4;
结果:
5, 5, 5, 3, 3, 3, 1, 1, 1, 7, 7, 7
那些。我看不出有什么不同。
如何理解有什么区别,它在什么情况下表现出来?