精华内容
下载资源
问答
  • 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高...

    一、存储过程介绍:

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而

    一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速

    度。2.当对数据库进行复杂操作时(如对多个表进行

    Update,Insert,Select,Delete 时),可将此复杂操作用存储过程封装起来

    与数据库提供的事务处理结合一起使用。3.存储过程可以重复使用,可减少数据库开发人员的工作量。4.安全性高,可设定只有某个用户才具有对指定存储过程的使用权。

    二、使用存储过程的优缺点:

    相对于直接使用SQL 语句,在应用程序中直接调用存储过程有以下好处:

    1.减少网络通信量:调用一个行数不多的存储过程与直接调用SQL 语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL 语句,那么其性能绝对比一条一条的调用SQL 语句要高得多。

    2.执行速度更快:有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。

    3.更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。

    4.分布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

    5.可以防止sql注入。

    缺点:

    1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

    2.可移植性差  由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

    三、存储过程(stored procedure)、存储例程(store routine)、存储函数区别:

    Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。

    展开全文
  • 总结下使用存储过程的优缺点一、存储过程优点存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同...

    总结下使用存储过程的优缺点

    一、存储过程优点

    存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。

    1.具有更好的性能

    存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速度。

    2.功能实现更加灵活

    存储过程中可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。

    3.减少网络传输

    复杂的业务逻辑需要多条 SQL 语句,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会减少,降低了网络负载。

    4.具有更好的安全性

    (1)数据库管理人员可以更好的进行权限控制,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

    (2)在通过网络调用过程时,只有对执行过程的调用是可见的。无法看到表和数据库对象名称,不能嵌入SQL 语句,有助于避免 SQL 注入攻击。

    二、存储过程的弊端

    1.架构不清晰,不够面向对象

    存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,

    2.开发和维护要求比较高

    存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。

    3.可移植性差

    过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。

    三、总结

    存储过程与SQL语句如何抉择?

    架构设计没有绝对,只有在当前的场景下最合适的。

    普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。

    (1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程

    (2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程

    (3)比较复杂的统计和汇总可以考虑应用后台存储过程

    展开全文
  • 我不喜欢存储过程存储过程更易于维护,因为:*您不必在需要更改某些SQL时重新编译C#应用程序。如果数据类型发生变化,或者您希望返回一个额外列,或者其他什么,您最终都会重新编译它。您可以从应用程序下面...

    我不喜欢存储过程存储过程更易于维护,因为:*您不必在需要更改某些SQL时重新编译C#应用程序。

    如果数据类型发生变化,或者您希望返回一个额外的列,或者其他什么的,您最终都会重新编译它。您可以从应用程序下面“透明地”更改sql的次数总体上是相当少的。最后,您将重用SQL代码。

    编程语言,包括C#,有一个很棒的东西,叫做函数。这意味着您可以从多个地方调用相同的代码块!太棒了!然后,您可以将可重用的SQL代码放入其中之一,或者如果您想获得真正的高技术,可以使用一个为您服务的库。我相信它们被称为ObjectRelationalMappers,现在已经相当普遍了。当您试图构建一个可维护的应用程序时,代码重复是您所能做的最糟糕的事情!

    同意,这就是为什么仓库是一件坏事。将代码重构和分解(分解为较小的部分)为函数比将SQL分解为.块SQL?您有4台Web服务器和一堆使用相同SQL代码的windows应用程序,现在您意识到SQL代码有一个小问题,所以您宁愿.在1处更改proc或将代码推送到所有web服务器,在所有windows框上重新安装所有桌面应用程序(ClickOnce可能会有所帮助)。

    为什么Windows应用程序直接连接到中央数据库?这似乎是一个巨大的安全漏洞,也是一个瓶颈,因为它排除了服务器端缓存的可能性。它们不是应该通过Web服务或类似于您的Web服务器进行连接吗?

    那么,推出一个新的sproc,还是4个新的web服务器?

    在这种情况下是更容易推动一个新的sproc,但在我的经验中,95%的“推送更改”影响代码,而不是数据库。如果你那个月把20件事推到网络服务器上,把1件事推到数据库上,那么如果你把21件事推到网络服务器上,把0件东西推到数据库里,你几乎不会损失很多。更容易检查代码。

    你能解释一下怎么做吗?我不明白。特别是由于spros可能不在源代码管理中,因此不能通过基于web的SCM浏览器访问,等等。

    更多的缺点:

    Storedprocs生活在数据库中,在外界看来,它是一个黑匣子。简单的事情,比如想把它们放在源代码管理中,就变成了一场噩梦。

    这也是纯粹努力的问题。把所有的东西分解成一个百万层如果你想向你的首席执行官证明为什么要花700万美元来建立一些论坛,但否则,为每件小事创建一个商店只是额外的额外工作,却没有任何好处。

    展开全文
  • 索引,视图和存储过程的利弊

    千次阅读 2014-03-26 19:54:28
    在网上看到有关视图和存储过程的一道面试题,就整理一下。本文参考到维基百科还有其他网站的的一些解释。 索引:索引是一本书籍的重要组成部分,它把书中的重要名词列罗列出来,并给出它们相应的页码,方便读者快速...

    作者:王奎    我的博客:www.marksaas.com

    在网上看到有关视图和存储过程的一道面试题,就整理一下。本文参考到维基百科还有其他网站的的一些解释。

    索引:索引是一本书籍的重要组成部分,它把书中的重要名词列罗列出来,并给出它们相应的页码,方便读者快速查找该名词的定义和含义,感觉维基百科上的解释很形象,在数据库中索引是数据库的对象之一,索引是为了加速对表中数据行的检索而创建的一种分散的一种存储结构。索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的 。

    索引的分类:

    (1)聚集索引

    聚集索引指示表中数据行按索引键的排序次序存储,聚集索引对查找行很有效。只有当表包含聚集索引时,表内的数据行才按索引列的值在磁盘上进行物理上排序和存储。每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。当查询指定了关键值的范围或者按照关键值的顺序访问数据行时,应考虑在对应的列上创建聚集索引。

    聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行物理相邻。例如,应用程序查询某一日期范围内的记录,如果在日期列上创建了聚集索引,则能够快速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则创建聚集索引指示表中的行按照该行的键值顺序进行排序,避免每次查询该列时都执行排序,从而节省成本。例如,对于ORDER BY或GROUP BY子句中指定的列进行索引,可以使DB2不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。

    当索引值唯一时,使用聚集索引查找特定的行也很有效率。

    注意:聚集索引不适用于频繁更改的行,因为DB2 必须按聚集索引的键值改变行的物理顺序存储,如果聚集索引列中的数据频繁修改,将导致聚集索引频繁修改,数据整行移动,消耗大量的系统资源。

    (2)非聚集索引

    非聚集索引具有完全独立于数据行的结构,数据行不按索引值的次序存储。在非聚集索引中,每个索引键都有指针指向包含该键值的数据行。

    当用户需要使用多种方法查询数据时,非聚集索引非常有用。每张表只能有一个聚集索引,但是用户的查询条件是多样的。例如,员工表的EmployeeID列上已经创建了聚集索引,但是用户经常会使用员工的姓名、所在部门、出生日期等作为查询条件,所以应当考虑在这些列上创建非聚集索引,以提高查询效率。

    如果创建索引时没有指定索引类型,默认情况下为非聚集索引。每个表最多可以创建249个非聚集索引。最好在唯一值较多的列上创建非聚集索引。

    参看http://book.51cto.com/art/201008/216220.htm

    查看表 (View) 是在关系数据库中,将一组查询指令构成的结果集,组合成可查询的数据表的一种数据库对象。与数据表不同的是,数据表是一种实体结构(Physical Structure),但查看表是一种虚拟结构(Virtual Structure),在实体数据表中的改变都可以立刻反应在查看表中,不过部份数据库管理系统也支持具更新能力的查看表(Updatable View)。

    查看表具有下列的好处:

    • 可以将实体数据表隐藏起来,让外部程序的设计师无法得知实际的数据结构,降低数据库被攻击的风险。
    • 在多数的情况下,查看表是只读的,外部程序无法直接通过查看表修改数据(具更新能力的查看表除外)。
    • 简化查询,数据库管理员可以将高度复杂的查询,包装在查看表中,外部程序只需要直接访问该查看表即可取出需要的数据。
    • 在查看表中先行运行运算。
    • 查看表可视为数据表,具有 JOIN 的能力。
    • 数据库中只需要存储定义,无须存储数据。
    • 语法如下
      create view myview
          as select * from  mytable;
      查看表语句:
      select * from myview where myId=3;
      储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。
    • 预存程序具有下列的好处:

      • 预存程序可封装,并隐藏复杂的商业逻辑。
      • 预存程序可以回传值,并可以接受参数。
      • 预存程序无法使用 SELECT 指令来运行,因为它是子程序,与查看表数据表用户定义函数不同。
      • 预存程序可以用在数据检验,强制实行商业逻辑等。
      • 缺点:
      • 预存程序,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的预存程序。
      • 预存程序的性能调校与撰写,受限于各种数据库系统。
      • 预存程序是数据库对象之一,必须使用数据定义语言来创建,例如:

        以下示例,以Microsoft的SQL Server所以采用的T-SQL语法表示。
        CREATE PROCEDURE usp_AddProduct
        (
           @Barcode VARCHAR(13),
           @Caption nvarchar(50)
        )
        AS
        BEGIN
         
           IF LEN(@Barcode) < 13 
              RAISERROR('Barcode length is too short.')
         
           INSERT INTO MyProducts (Barcode, Caption) VALUES (@Barcode, @Caption)
         
        END
        外部程序需要使用 EXECUTE 或 CALL 来调用预存程序。
        EXEC usp_AddProduct '2293891100011', 'MyProductCaption'




    展开全文
  • 在报表项目中,当数据计算较为复杂... 说到存储过程的长处,性能是最常被提及的。存储过程进行报表数据计算的时候。不须要将数据取出数据库,会获得较高的性能。其主要原因是数据库IO通道(比如:JDBC)效率一向非常...
  • 数据库 存储过程

    2020-08-05 11:26:17
    使用存储过程的利弊 好处 通过把处理封装在一个易用的单元中,可以简化发杂的操作; 保证数据的一致性; 简化对变动的管理,保证数据的安全性; 降低系统工作量,提高性能; 可以存储一些SQL元素和特性,加强编写...
  • 集算器提供并行执行能力,可以充分利用普通计算机和PC服务器来实现分布式计算集群,可获得远远超过存储过程的性能。如果业务允许,可以考虑将数据库中的报表相关数据移到文件系统中,利用集算器的计算能力为报表提供...
  • 一、性能说到存储过程的优点,性能是最常被提及的。存储过程进行报表数据计算的时候,不需要将数据取出数据库,会获得较高的性能,这是因为数据库IO通道(如JDBC)效率低,大量数据取出来很费时。即便如此,...
  • 【数据蒋堂】第 12 期:存储过程的利之弊存储过程是数据库领域中应用非常广泛的技术,关于它的利弊讨论由来已久,我们这里针对存储过程的两个公认度较高的优点进行剖析,从而更清楚存储过程的潜在风险及应用场景。...
  • 存储过程是数据库领域中应用非常广泛的技术,关于它的利弊讨论由来已久,我们这里针对存储过程的两个公认度较高的优点进行剖析,从而更清楚存储过程的潜在风险及应用场景。 存储过程利于界面与逻辑分离! 界面与...
  • MySQL存储过程

    2016-04-09 23:59:00
    在MySQL中使用存储过程,可以将相关数据操作语句打包在一起,减少了应用程序到数据库之间连接,相应地提高了性能。当然如果要编写大量的存储过程,维护调试也是个问题。因此需要自己权衡利弊。 1、语法 ...
  • 存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤。...集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具。报表例子说明某电信...
  • 前言 很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解...索引的利弊以及高效使用 索引利弊 在前面的文章,我们学习了索引的数据结构和存储方式,下面再来理解索引...
  • 因为索引就是对字段数据进行排序后存储的,如果待排序字段与索引键字段一致,就在取出数据后不用再次排序了,因为通过索引取得数据已满足排序要求。另外,分组操作是先排序后分组,所以索引同样可以省略分组...
  • 编译含义 ——————————————————————————– 当SQLSERVER收到任何一个指令,包括查询(query)、批处理(batch)、存储过程、触发器(trigger) 、预编译指令(prepared statement)和动态...
  • Hibernate与MyBatis对比:  1.MyBatis非常简单易学,与Hibernate相对复杂,门槛较高;... 4,系统数据处理大量,将性能要求极为苛刻,这往往意味着我们必须通过比较高度优化SQL语句(或存储过程)才...
  • 选择错误设置会花费相当多时间和金钱,并且在这个过程中会给你留下许多不安用户。 MongoDB和MySQL都是很好数据库,但是哪一个更适合建立社交网络呢? MongoDB是一个NoSQL数据库,这意味着相关数据被存储在...
  • MySQL索引详解之索引的存储方式

    千次阅读 2020-04-21 18:53:46
    前言 很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解...索引的利弊以及高效使用 数据存储方式 上篇文章我们了解了索引的数据结构,下面我们再来了解另外一个概念...
  • 需要接触与数据存储打交道那一块业务,以前的项目开发过程中因为写的都是棋牌玩法相关的业务逻辑,虽然也私下看过DB服务代码,但是当时对数据库与缓存的理解还是停留在语法使用层面,所以对DB服务设计的利弊完全没有...
  • MySQL索引详解之索引数据结构

    千次阅读 2020-04-21 18:53:22
    前言 很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解...索引的利弊以及高效使用 什么是索引 数据库索引指的是数据库管理系统中一个排序的数据结构,以协助快速查...
  • 需要接触与数据存储打交道那一块业务,以前的项目开发过程中因为写的都是棋牌玩法相关的业务逻辑,虽然也私下看过DB服务代码,但是当时对数据库与缓存的理解还是停留在语法使用层面,所以对DB服务设计的利弊完全没有...
  • 在本次的课程设计中我觉得应该注意的加强对触发器和存储过程的操作能力。虽然不是很难,但很多细小的问题需要认真的对待,稍有不注意问题就会在具体的应用程序调试过程中出现,这要求我们在实践的过程中除了要了塌实...
  • SQL优化

    2019-06-26 18:19:26
    文章目录SQL优化一、Linux下RPM版MYSQL安装、启停1.1 环境1.2 MySQL版本1.3 MySQL安装二、MySQL启动问题、配置文件、编码问题三、MySQL分层、存储引擎3.1 MySQL逻辑分层3.2 存储引擎四、SQL解析过程、索引、B树4.1 ...
  • Mysql—索引介绍

    2019-02-19 18:32:58
    1.索引的利弊 优势: 1.能够保证数据每一行的唯一性 2.合理运用时加快数据的查询速度 3.增强表与表之间的链接,参考完整性 4.减少分组、排序等操作的查询时间 5.优化查询过程,提高系统性能 弊端: 1.创建、...
  • 混合模型带来了这两种方法的利弊,而经过微调的应用程序可以胜过JIT的弊端。 PHP的JIT实施是Dmitry Stogov付出的巨大努力,历时数年之久的讨论,实施和测试都是如此。 PHP JIT: PHP 8.0的JIT基础概述和配置选项....

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

存储过程的利弊