MySQL中的DETERMINISTIC和非确定性函数

时间:2017-07-15 12:46:39

标签: mysql sql

我对确定性功能的理解是:

  

始终为相同的输入参数生成相同的结果

根据我的理解,下面的功能是非确定性功能

CREATE FUNCTION foo (val INT) READS SQL DATA
BEGIN
   DECLARE retval INT;
   SET retval = (SELECT COUNT(*) FROM table_1 WHERE field_1 = val);
   RETURN retval;
END;

如果我在功能中不使用确定性或非确定性关键字,它会降低性能,或者是执行计划的必要条件。

1 个答案:

答案 0 :(得分:1)

当您将函数声明为确定性时,查询计划程序知道它可以利用该函数的缓存结果。它可能加快速度。几乎没有看起来在表中的功能可以是确定性的。

如果您不确定自己的功能是否具有确定性,则可能不是。