SQL存储过程的优缺点

SQL存储过程的优缺点概要 存储过程是由一些 SQL 语句和控制语句组成的被封装起来的过程 它驻留在数据库中 可以被客户应用程序调用 用户通过指定存储过程的名字并给定参数 如果该存储过程带有参数 来调用执行它 也可以从另一个过程或触发器调用 存储过程是可编程的函数 在数据库中创建并保存 可以由 SQL 语句和控制结构组成 当想要在不同的应用程序或平台上执行相同的函数 或者封装特定功能时 存储过程是非常有用的 数据库中的

概要:


例子:


优点:

  1. 减少网络通信量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。
  2. 较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
  3. 标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
  4. 作为一种安全机制来充分利用:使用存储过程使您能够增强对执行计划的重复使用,通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
  5. 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
  6. 可维护性高:更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

缺点:

  1. 不可移植性,每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时最好不要用存储过程。
  2. 学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。
  3. 业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。
  4. 存储过程和常用应用程序语言不一样,它支持的函数及语法有可能不能满足需求,有些逻辑就只能通过应用程序处理。
  5. 如果存储过程中有复杂运算的话,会增加一些数据库服务端的处理成本,对于集中式数据库可能会导致系统可扩展性问题。
  6. 为了提高性能,数据库会把存储过程代码编译成中间运行代码(类似于java的class文件),所以更像静态语言。当存储过程引用的对像(表、视图等等)结构改变后,存储过程需要重新编译才能生效,在高并发应用场景,一般都是在线变更结构的,所以在变更的瞬间要同时编译存储过程,这可能会导致数据库瞬间压力上升引起故障(Oracle数据库就存在这样的问题)。

总结:


参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178790.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:29
下一篇 2026年3月26日 下午4:29


相关推荐

  • db2 删除索引_数据库三种删除方式

    db2 删除索引_数据库三种删除方式第一种使用 delete 语句特点 delete 属于数据库操纵语言 DML 表示删除表中的数据 删除过程是每次从表中删除一行 并把该行删除操作作为事务记录在日志中保存 可以配合事件 transaction 和回滚 rollback 找回数据 且自增不会被重置 delete 既可以对 table 也可以对 view 可以全部删除 也可以按条件删除语法 删除表中全部数据 dele

    2026年3月19日
    2
  • 阿里巴巴Page-Agent:用自然语言控制网页界面的JavaScript GUI代理

    阿里巴巴Page-Agent:用自然语言控制网页界面的JavaScript GUI代理

    2026年3月13日
    3
  • 2019 最新 JAVA eclipse 中文汉化包 安装教程&Eclipse 汉化教程完美版

    2019 最新 JAVA eclipse 中文汉化包 安装教程&Eclipse 汉化教程完美版2019最新JAVAeclipse中文汉化包安装教程https://blog.csdn.net/qq_40763929/article/details/83067921Eclipse汉化教程完美版https://blog.csdn.net/weixin_39626452/article/details/80631849…

    2022年5月9日
    108
  • Odin Inspector 系列教程 — List Drawer Settings Attribute

    Odin Inspector 系列教程 — List Drawer Settings AttributeListDrawerSettingsAttribute自定义数组或者列表绘制方式Odin已经重写对应的数组和列表的绘制[Title(“ListBasics”)][InfoBox(“现在可以拖动列表元素来重新排序并逐个删除它们,并且列表具有分页功能(尝试添加大量元素!)您仍然可以从项目视图一次将许多资产拖到列表中—只需将它们拖到列表本…

    2022年7月21日
    16
  • ArcGIS之网络分析连通性问题

    ArcGIS之网络分析连通性问题nbsp 网络分析在 ArcGIS 的空间分析中至关重要 小编最近在做全国铁路数据空间可达性分析时 创建网络数据集时 在两条线要素在同一交点处 由于点连通性选择错误 导致后来的临近设施查询出错 也会导致最短路径出错 在此我分享我的出错原因 nbsp nbsp 1 创建网络数据集 nbsp nbsp 在第三步 connectivity 选择连通性如下图所示 connectivity 中 铁路和 city 连通性选择很重要 endp

    2026年3月17日
    2
  • Razor语法大全(cshtml语法)

    Razor语法大全(cshtml语法)本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078.htmlRazor是基于framewor4以上写的一个开源项目:https://github.com/Antaris/RazorEngine/Razor是包含了模板引擎和动态编译两部分。本部分就简单记录了模板引擎的一些语法,之后用Razor做一个代码生成器,就使用Razor的语法来。Razo

    2022年6月16日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号