首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程 函数 预编译,该怎么处理

2013-06-25 
存储过程 函数 预编译书本上,网络上一直在强调存储过程有预编译,执行起来会比单独的SQL语句快,这个好理解。

存储过程 函数 预编译
书本上,网络上一直在强调存储过程有预编译,执行起来会比单独的SQL语句快,这个好理解。
那自定义函数呢?网上有说它有预编译,有说它没有预编译的。书本上也没有给出一个明确的说法。
在下初学SQLserver不清楚到底是怎么一个情况。想请教一下大家。
[解决办法]

Select Newid();
GO
Create function dbo.fn(@n int)returns int/*C51634A6-6FA3-45FF-BA76-EC82CEB6A498*/
as
Begin
return @n+1;
End
Select *
From sys.syscacheobjects
Where sql like '%C51634A6-6FA3-45FF-BA76-EC82CEB6A498%'

select dbo.fn(number) as vl
From master..spt_values
Where type = 'P'
And number < 11
---------------------------------------
11074Compiled PlanProc539148966121212324347303000000216Create function fn(@n int)returns int/*C51634A6-6FA3-45FF-BA76-EC82CEB6A498*/  as  Begin   return @n+1;  End
14500Compiled PlanAdhoc719910009120-224454347303000000182Select *  From sys.syscacheobjects  Where sql like '%C51634A6-6FA3-45FF-BA76-EC82CEB6A498%'

我觉得大家之所以喜欢存储过程是因为他的缓存执行计划吧。
我简单测试了一下,函数也是会缓存执行计划的,实际上MsSqlserver所有的查询好像都会缓存执行计划,只是复用的程度不同吧。
但是函数相比存储过程有许多限制,比如说不能修改表,不能使用有副作用的函数,但是函数明显的好处就是它几乎能出现在查询的任何位置。比如Select、Where、等等。
个人理解。

[解决办法]
应该一分为二的来看问题了,有些自定义函数的确可以提高效率,但不是全部的有些是用表关联会更快,须具体问题具体分析了

热点排行