【疑问】什么时候使用存储过程比较适合

本文探讨了在数据库中使用存储过程的优点与缺点。优点包括提高执行速度、简化复杂操作、增强安全性和便于维护等;同时也指出了存储过程的局限性,如可移植性较差等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。

 

为了系统的控制方便,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更改客户端程序。也无需重新安装客户端应用程序。

存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在:
  1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
  3.存储过程可以重复使用,可减少数据库开发人员的工作量。
  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

优点:
1.速度快。尤其对于较为复杂的逻辑,减少了网络流量之间的消耗
我有的过程和函数达到了几百行,一个微型编译器,相信用程序就更麻烦了。
2.写程序简单,采用存储过程调用类,调用任何存储过程都只要1-2行代码。
(我不知道别人怎么调用,我是深受其益)
3.升级、维护方便
4.调试其实也并不麻烦,可以用查询分析器
5.如果把所有的数据逻辑都放在存储过程中,那么asp.net只需要负责界面的显示阿什么的,出错的可能性最大就是在存储过程。我碰到的就一般是这种情况。

缺点:
1.可移植性差,我一直采用sql server开发,可是如果想卖自己的东西,发现自己简直就是在帮ms卖东西,呵呵。想换成mysql,确实移植麻烦。
2.采用存储过程调用类,需要进行两次调用操作,一次是从sql server中取到过程的参数信息,并且建立参数;第二次才是调用这个过程。多了一次消耗。
不过这个缺点可以在项目开发完成,过程参数完全确定之后,把所有过程参数信息倒入到一个xml文件中来提高性能。

 

当一个业务同时对多个表进行处理的时候采用存储过程比较合适。

 

  1. 使用存储过程在一般情况下会提高性能,因为数据库优化了存储过程的数据访问计划并应用缓存方便以后的查询;

  2. 存储过程单独保护存在于数据库中。客户端可以获取权限执行存储过程,而不需要对底层的具体表设置其他的访问权限;

  3. 存储过程会使得维护起来更加方便,因为通常修改一个存储过程要比在一个已经发布的组件中修改SQL语句更加方便;

  4. 存储过程给底层数据格式增添了额外的抽象层。使得使用存储过程的客户端对存储过程的实现细节以及对底层数据格式是隔离独立的;

  5. 存储过程能够缓解网络带宽,因为可以批量执行SQL语句而不是从客户端发送超负载的请求。

复杂的数据处理用存储过程,如有些报表处理

多条件多表联合查询,并做分页处理

转载)


-----------------------------------------------------------------------------------------------------------------------

  说白了,就是业务逻辑部署在哪里的问题。部署在数据库,程序里当然只有数行的调用代码,当然是这种做法有一定好处,如减少了客户端的运算压力等,但好坏是相对的,就拿这点来说,客户端压力少了,服务端压力就会变大,好

与非好不是一个人说了算的,要考虑技术和物理支撑多方面因素,当然我认为主要是技术上的问题占主导,偏向数据库技术的人一般喜欢存储过程,这没绝对的对错,但别太过偏执自己的观点。然而对于基于.NET开发的程序员,程序代码

是主,数据库是次,次只是附属,而不是必需品,众多额.NET开发人员还是应该把业务逻辑写在.NET代码上,以便业务逻辑在不断更替的技术中重用。反之,项目经理今天用关系型数据库来支撑项目,明天也可以用NoSQL,甚至是

XML,TXT之流作为持久化介质。当然更换持久化介质的频率不会很频繁,但如果真要算一算生命周期,也不会很长,除非你的工作生涯是和公司绑定死,并且公司是不会普及新技术的会一直用关系型数据库到永远。我想没人会这么傻

吧?就算你愿意,公司也不一定坚持到你退休。看待这个问题要放长双眼,而不是墨守成规,沾沾自喜。

-----------------------------------------------------------------------------------------------------------------------

  团队的技术背景问题。。。存储过程效率上的优势还是有的

-----------------------------------------------------------------------------------------------------------------------


本文转载至:http://www.cnblogs.com/jack-liang/archive/2011/08/08/2130648.html

在帆软报表(FineReport)中使用存储过程取数是一种高效的方式,尤其当数据处理逻辑复杂、需要优化性能时。下面详细介绍如何配置并使用存储过程数据库中提取数据。 ### 步骤一:创建存储过程 假设你正在使用的是一套基于 MySQL 的业务系统,在此示例我们将新建一个名为 `get_employee_info` 的简单存储过程用于演示目的。 ```sql DELIMITER $$ CREATE PROCEDURE get_employee_info(IN dept_id INT) BEGIN SELECT * FROM employees WHERE departmentId = dept_id; END$$ DELIMITER ; ``` 上述代码段定义了一个接收部门 ID 参数然后返回该部门内员工列表的功能模块。 --- ### 步骤二:设置数据集 接下来切换至 FineReport 设计界面完成相应绑定动作: 1. **添加新的 JDBC 数据源** 打开模板设计窗口 -> 点击左侧“资源”区域中的【+】按钮新增项目;选择正确的驱动程序文件路径以及填写好URL/用户名密码组合等相关认证凭据确保连通无误后保存改结果。 2. **构建依赖于存储过程数据集合** 右键单击刚建立好的连接名称旁边空白处弹出菜单项->选取"插入SQL语句..."选项卡开始编辑具体查询表达式内容。 注意这里不同于普通表记录检索形式语法稍有区别,例如对于前述例子来说应当撰写成: ```java {CALL get_employee_info(?)} //这里的问号表示占位符后续可通过参数面板指定其真实值 ``` 同时别忘了勾选下方是否启用预览模式以便即时观察输出样式调整排版布局直至满意为止最后确定提交即可生效! --- ### 注意事项 - 每次修改完后台脚本记得同步新前端展示部分保持一致性; - 根据实际需求考虑加入异常捕捉机制提高容错能力减少不必要的麻烦发生几率; - 针对大批量运算任务建议采用异步加载策略提升用户体验流畅度水平。 希望这份指南对你有所帮助!如果还有疑问欢迎继续提问交流哦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值