经过大量的实验后,我把它缩小到一个场景,在没有安全定义器的情况下,相同的功能在几毫秒内运行并且使用它大约半小时。
这是一个顶级函数,它调用其他函数并用几个表连接结果 - 所以有很多事情要发生。 所有较低的函数都是在没有安全定义器的情况下定义的。
安全定义者到底做了什么?安全定义器函数的性能是否取决于它使用的函数/表返回的行数或列数?
我们从函数和表中获取了大量数据 - 我们注意到减少返回的列数会使查询更快。可能是Security Definer多次检查某些权限,对于大型数据集,它会产生更大的影响吗?