根据mysql 5.6 文档:
在这些情况下,查询也不会被缓存: ... 它指的是用户定义的函数 (UDF) 或存储的函数。
但是,我看到有人声称如果 UDF 是完全确定的,那么实际上可以缓存查询。有人可以证实或否认吗?如果 UDF 确实阻止了缓存,那么是否有比简单地将 UDF 内联到每个查询中更聪明的方法来允许缓存查询?(这会起作用,但显然会很麻烦。)
编辑:此外,存储函数与用 C 编写的用户定义函数的行为是否不同?
根据mysql 5.6 文档:
在这些情况下,查询也不会被缓存: ... 它指的是用户定义的函数 (UDF) 或存储的函数。
但是,我看到有人声称如果 UDF 是完全确定的,那么实际上可以缓存查询。有人可以证实或否认吗?如果 UDF 确实阻止了缓存,那么是否有比简单地将 UDF 内联到每个查询中更聪明的方法来允许缓存查询?(这会起作用,但显然会很麻烦。)
编辑:此外,存储函数与用 C 编写的用户定义函数的行为是否不同?
基于对 MySQL 5.5.33 的一些实验,答案是否定的。我有一个确定性的函数定义(这是一个简单的日期计算)并标记为 DETERMINISTIC。如果我在查询中使用它,查询不会被缓存。如果我根据内置 date_sub() 函数的定义替换调用,查询将被缓存。