mysql udf 性能_MySQL中的UDF性能

当查询在SELECT或WHERE子句中包含对UDF的调用时,我注意到MySQL查询执行时间的指数性能下降.有争议的UDF查询本地表以返回标量值 – 因此它们不仅仅是执行算术表达式,而是作为相关子查询.我通过简单地删除UDF并使用相关子查询,更复杂的连接等重写来解决性能问题.

我想如果我只有MySQL经验,我会接受这个作为现实,调整我对UDF的使用并继续前进.但在使用MySQL之前,我在SQL Server上工作了5年.我构建了一个处理大得多的数据集的计费系统,并且非常依赖于标量和表值用户定义的函数.那些UDF也执行了查询(即不仅仅是算术运算).在SQL Server上使用用户定义的函数时,我没有遇到这种性能损失.

我想知道的是,这里是否有人知道SQL Server与MySQL的内部结构是否足以确认或解释我目前关于两个系统中UDF性能差异的理论.我的理论是,SQL Server的优化器评估UDF与MySQL不同.也许是因为表引擎在MySQL中解耦了?或者在SQL Server上使用UDF更为普遍,MySQL引擎的优化器到目前为止还没有发展?我在想的是,SQL Server优化器可能会将包含的UDF视为周围查询的一​​部分(如果可能),然后将其与查询的其余部分一起优化?也许我在这里已经不合时宜了,但我从来没有看到过在SQL Server上使用UDF的这种性能打击.

其他人可以解决这个问题的任何亮点将不胜感激.

解决方法:

标签:mysql,sql,sql-server,user-defined-functions

来源: https://codeday.me/bug/20190701/1344520.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值