存储函数和视图在数据库中有什么区别?

5

我不理解存储函数视图之间的区别。 在SELECT语句中使用视图将执行查询并返回结果,但是存储函数也会做同样的事情,对吗?那么它们有什么区别呢?我什么时候应该使用视图,什么时候使用存储函数


可能是重复的问题:https://dev59.com/R0fSa4cB1Zd3GeqPBvzF - Yaqub Ahmad
6个回答

7

视图: 视图是一个虚拟的,它并不存在于物理上。相反,它是通过查询连接一个或多个创建的。视图返回一个表

存储过程:存储过程是一组Transact-SQL语句编译成单个执行计划。
存储过程返回输出参数返回代码(始终为整数值),对于存储过程中包含的任何SELECT语句或由存储过程调用的任何其他存储过程,都会返回一个结果集,以及可以在存储过程之外引用的全局游标。
存储过程的主要优点预编译执行减少客户端/服务器流量有效重用代码编程抽象增强的安全控制

更新:

存储函数是一个命名的PL/SQL块,类似于一个过程。过程和函数的主要区别在于,函数必须始终返回一个值,但过程可能返回也可能不返回值。 1)返回类型:头部定义了函数的返回类型。返回数据类型可以是任何Oracle数据类型,如varchar、number等。 2)执行和异常部分都应返回与头部部分定义的数据类型相同的值。


但是我谈论的是函数而不是过程。 - theateist
我以为你是指存储过程,但请查看更新后的答案,谢谢。 - Hasib
此外,视图无法传递参数,但存储过程和函数可以。另外,PL/SQL 也有存储过程。 - Dylan Czenski

3

在大多数数据库中,您可以使用存储函数返回与视图相同的数据。

对我来说,区别在于函数是执行的,而视图是选择的。

视图将像表格一样行事。


你也可以拥有可供选择的函数(至少在Oracle和其他数据库中,对于SQL Server不确定)。 - user330315
是的,我知道,这更多是一种心理区分。 - idstam

0

视图返回一个特定的预定义语句,作为一个结果集。

函数返回一个单一值或一个结果集。然而,这可能因不同类型的数据库而异。

几种数据库实现还有存储过程,其结果可以是单个返回值、结果集或多个结果集。


0

简单入手(请开始阅读有关SQL的书籍):视图看起来像表格,因此您可以在结果上过滤,并且过滤器将有效地成为视图执行的一部分,或者进行连接。存储过程不允许这样做,但具有更多的逻辑。其余内容详见文档。


0

它们是无法比较的,它们有完全不同的方法。

视图是查询的输出,它创建了表的虚拟映像,并且不接受输入参数。

主要区别在于存储过程可以更改数据,而视图仅返回数据。从性能角度来看,存储过程更好,因为它缓存执行计划并因此运行更快。

存储过程/函数是一组预先执行的SQL语句,它接受参数,减少网络流量,提供更快的性能等。

编程语言中的SQL函数是用于封装频繁执行的逻辑的子程序。这些函数会稍微降低性能。

请查看这些SQL视图, SQL存储过程SQL用户定义函数

我的观点是,SQL存储过程(存储函数)更好用,因为它可以提供对结果集的自定义操作。


0

根据我的经验,我向您分享我的知识:

  • 不要使用视图
  • 最好使用存储过程(它是编译的SQL语句),您可以根据需要使用参数化过程。
  • 存储函数是编译的SQL语句集合,速度更快。

注意:视图是用于从表中选择数据的SELECT语句(带/不带JOIN),如果我们再次从VIEWS运行SELECT语句,则提供较慢的结果,因为内部操作如下(SELECT * FROM ( SELECT * FROM TargetTable )

因此,最好使用存储函数

更新:

函数是计算值,不能对SQL Server进行永久环境更改(即不允许INSERT或UPDATE语句)。

如果函数返回标量值,则可以在SQL语句中内联使用该函数,如果函数返回结果集,则可以加入该函数。

此外,请参考以下性能比较:SQL-Server 性能:存储过程和视图哪个更快?


1
从视图中选择数据与运行等效的存储SELECT语句的速度并不慢。 - user330315
据我所知,存储过程视图更快,我错了吗?谢谢您的时间。 - Elias Hossain
不,这个假设(作为一般规则)是错误的 - 至少对于Oracle来说是这样,但我非常确定对于SQL Server也是如此。 - user330315
你好 @a_horse_with_no_name,能否请您看一下这里:https://dev59.com/4nI-5IYBdhLWcg3w8NSB ,感谢您的时间。 - Elias Hossain
那篇帖子证明了我的观点。如果一个过程和一个视图使用相同的语句,那么性能没有区别。当然,如果它们做事情的方式不同(并且存储过程的实现方式可能比视图更慢或更快),就会有性能差异。 - user330315
是的,这就是SP实现的关键!在我看来,我们总是追求更好!感谢您宝贵的时间。 - Elias Hossain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接