关于自定义函数效率问题
BookInfo 图书基本信息表
BookCategory 图书分类表
BookCategoryDetail 图书分类关系表 (一对多关系,一本书多个分类)
现在要查询图书信息 还要用一个字段显示 分类名称和编号信息 “00030001|分类一,00030002|分类二...”
自己写了函数:
function [dbo].[fun_CategoryCodeName](@teamname uniqueidentifier)
returns varchar(4000)
as
begin
declare @temp varchar(4000)
set @temp = ''
set @temp = STUFF( (SELECT ','+M.CategoryCode+'|'+MC.CategoryName FROM (SELECT * FROM BookCategoryDetail where BookGuid = @teamname ) M
LEFT JOIN BookCategory MC ON M.CategoryCode=MC.CategoryCode FOR XML PATH('')),1,1,''
)
return @temp
end 调用函数查询:
select a.*,
[dbo].[fun_CategoryCodeName](a.BookGuid) AS CategoryCode
from BookInfo a结果能出来但是很慢 将近20秒 不到2W的数据
不用函数查询:
select a.*,
STUFF( (SELECT ','+M.CategoryCode+'|'+MC.CategoryName FROM (SELECT * FROM BookCategoryDetail where BookGuid = a.BookGuid ) M
LEFT JOIN BookCategory MC ON M.CategoryCode=MC.CategoryCode FOR XML PATH('')),1,1,''
) AS CategoryCode from BookInfo a然后把函数提出来在语句上面直接拼接结果一样 而且一秒就出结果了

这里就疑惑了 问什么用函数就会很慢呢 ???? 菜鸟一枚 求指教

相关推荐
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
大家可能都用过in_array来判断一个数据是否在一个数组中,一般我们的数组可能数据都比较小,对性能没什么影响,所以也就不会太在意
python自定义函数实现最大值的输出方法
今天小编就为大家分享一篇python自定义函数实现最大值的输出方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
sql自定义函数 sql自定义函数
sql自定义函数 sql自定义函数 sql自定义函数
mysql建立自定义函数的问题
创建函数时问题马上出现: ERROR 1418 (HY000): This routine has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable) 在mysql在线文档中找到解决方案,网址为: http://dev.mysql.com/doc/refman/5.1/zh/stored-pro
自定义函数引发的性能问题
---执行1次 select count(1) from LOAN_DUEBILLDATA bd left join LOAN_CONTRACTDATA bc on bd.RelativeSerialNo2 = bc.SerialNo where nvl(bd.ActualMaturity, bd.Maturity) <= '2014/08/06' and nvl(bd.A


疑难问题
