我对确定性功能的理解是:
始终为相同的输入参数生成相同的结果
根据我的理解,下面的功能是非确定性功能
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;
如果我在功能中不使用确定性或非确定性关键字,它会降低性能,或者是执行计划的必要条件。
答案 0 :(得分:1)
当您将函数声明为确定性时,查询计划程序知道它可以利用该函数的缓存结果。它可能加快速度。几乎没有看起来在表中的功能可以是确定性的。
如果您不确定自己的功能是否具有确定性,则可能不是。