日期:2014-05-16  浏览次数:20568 次

请教大家一个sql优化方案
原系统中有比较多的像下面的sql,
select dbo.udf_GetFreeStock(a.XX) from table1
其中dbo.udf_GetFreeStock是一个自定义函数,这个函数的内部逻辑比较的复杂,又有查询到多个表。

然后现在select dbo.udf_GetFreeStock(a.XX) from table1这个语句执行的非常慢,1万多条数据就到20多秒了。直接select * from table1是很快的,不到1秒。

请问大家类似这种问题我要如何优化呢?dbo.udf_GetFreeStock(a.XX)返回的信息sql中又是必须要的。
------解决方案--------------------
那就要优化自定义函数了
------解决方案--------------------
要不把自定义函数的代码,贴出来看看。

一般不建议用哈数,如果非得用,那么尽量让逻辑简单一点,否则速度肯定快不了
------解决方案--------------------
贴个执行计划来看看
------解决方案--------------------
引用:
那就要优化自定义函数了

是的,10w条的话就调用10w次,如果自定义函数的逻辑复杂的话,那就很慢了。
------解决方案--------------------
引用:
Quote: 引用:

要不把自定义函数的代码,贴出来看看。

一般不建议用哈数,如果非得用,那么尽量让逻辑简单一点,否则速度肯定快不了

它的逻辑很复杂呢,要读取系统的参数表,根据参数来计算富余库存数,富余库存数又包含了物料的供需数,安全库存数,现在有库存数。这三个信息又分别被存在不同的表中。然后取回数据了,还得经过一系列的运算才返回结果的。


这么复杂啊
,能不能直接把里面的代码取出来,和你上面的select * from tab 合并成1语句呢
------解决方案--------------------
不是很复杂的话就截图吧
------解决方案--------------------
引用:


看着这个执行计划,代码少不了,最好把代码贴出来。
------解决方案--------------------
这是存储过程,不是函数啊