关于自定义函数效率问题

snail0722 snail0722 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
表如下:
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

然后把函数提出来在语句上面直接拼接结果一样 而且一秒就出结果了

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

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
snail0722
疑难问题 22,298 成员 121,727 内容