日期:2014-05-17  浏览次数:20654 次

多表查询中调用了【标量值函数】导致性能极慢,该怎么解决?
多表查询中调用了【标量值函数】导致性能极慢,该怎么解决?

select c1,c2,[标量值函数](id) from 表1 left join 表2 on ……
------最佳解决方案--------------------
改成:
select c1,c2,[非标量值函数](id) from 表1 left join 表2 on …… 
------其他解决方案--------------------
将标量值函数拆了,作为表连入查询对象里面
------其他解决方案--------------------
把标量函数的逻辑放回查询里面实现,
------其他解决方案--------------------
引用:
非标量值函数是什么?

这个歌【标量值函数】是根据id来获取name,这个函数内的sql语句也很复杂,关联到3各表,如果把这个函数拆了,放到外面的查询语句中,没法关联条件,太复杂了


无非是指定条件查询吧,如果不能拆,那把当前的查询也写到函数里,直接用
select dbo.标题函数()
来执行.
------其他解决方案--------------------
那要看你的标量函数写得怎么样。
标量函数相当于是关联子查询。
------其他解决方案--------------------
如果2005以上可以考虑使用CROSS APPLY 
------其他解决方案--------------------
引用:
非标量值函数是什么?

这个歌【标量值函数】是根据id来获取name,这个函数内的sql语句也很复杂,关联到3各表,如果把这个函数拆了,放到外面的查询语句中,没法关联条件,太复杂了
没法关联条件??我不信,你的关联条件已经这么明显了
------其他解决方案--------------------
非标量值函数是什么?

这个歌【标量值函数】是根据id来获取name,这个函数内的sql语句也很复杂,关联到3各表,如果把这个函数拆了,放到外面的查询语句中,没法关联条件,太复杂了
------其他解决方案--------------------
好麻烦啊,不知道表结构,让我来优化sql,数据有10多万条,关系错综复杂,该怎么优化啊,我现在真是一点头绪都没有啊