当前位置:  开发笔记 > 数据库 > 正文

存储过程的缺点

如何解决《存储过程的缺点》经验,为你挑选了6个好方法。

想获得使用存储过程的优缺点列表.SP的主要优点似乎是预编译并从应用程序中抽象出数据.给我你的想法....



1> ckarras..:

优点:为数据库(另一个抽象层)提供"公共接口".

还可以在同一位置对所有查询进行分组,从而使DBA更容易查看数据库的查询方式并相应地对其进行优化.

缺点:可能不是放置复杂逻辑的最佳位置.但是,遵循复杂逻辑属于应用程序代码而不是存储过程的想法,存储过程变为简单的CRUD操作(每个表都有"创建","读取","更新"和"删除"过程).在这种情况下,存储过程不会向应用程序添加任何值,它们只会使维护变得复杂并变得浪费.

查询全部组合在一起,因此很难看到应用程序使用它们的上下文.分析变更的影响的时间越长,变更的时间也越长.

因此:使用存储过程来封装复杂查询(复杂连接,复杂where子句,...).但是不要将存储过程用于复杂的应用程序/域/业务逻辑,也不要将存储过程用于CRUD.因此,应该在少数情况下使用存储过程,而不是应用程序中所有查询的标准工具.

分组代码(包括查询)以实现"功能凝聚力"而不是按工具/技术分组.要允许DBA根据查询方式优化数据库,请使用分析器.


查询不在数据库结构上提供抽象层,因为您必须为连接指定表名,列名和键名.但我同意视图,它们可以是在数据库结构上创建抽象层的另一种方式(用于查询数据,以及通过"而不是"触发器来修改它).两个抽象层(存储过程与视图)之间的主要区别在于存储过程是"动词"而视图是"名词".

2> Ryan Lundy..:

更正:它们是否预编译取决于数据库.例如,在SQL Server中,它们不是.存储过程和参数化SQL都在运行之前进行编译.如果存在相应的存储过程,则存储过程有时可以重用执行计划......但参数化SQL也是如此.

编辑: 以下是MSDN对此的评价:

SQL Server 2000和SQL Server 7.0版对语句处理进行了许多更改,这些更改将存储过程的许多性能优势扩展到所有SQL语句.SQL Server 2000和SQL Server 7.0在创建存储过程时不保存部分编译的计划.与任何其他Transact-SQL语句一样,存储过程在执行时编译.SQL Server 2000和SQL Server 7.0保留了过程高速缓存中所有SQL语句的执行计划,而不仅仅是存储过程执行计划.



3> DCNYAM..:

通过使用SP,您还可以避免让用户直接访问表.可以通过SP控制所有访问.


不是那么大,因为它也可以通过视图或其他数据库平台特定的访问控制工具(角色,...)来完成
不,它仍然是一个很大的优势,无论其他方法如何.
@Gromer:存储过程对这些其他可用方法有哪些优势?他们做得更好吗?只能使用存储过程才能完成的事情?

4> Patrick Desj..:

缺点

重构更难.重命名或更改存储过程的位置可能会产生不良影响.

单元测试存储过程需要DB外部的代码帮助

优点

您无需进行部署即可进行更改.

有时更快

更容易扩展系统



5> Vin..:

使用当前的.Net 3.5框架库,我将使用Linq来执行大多数数据库操作.可能有些地方SP更有意义.但Linq也有规定运行SP.

关于SP的缺点,请查看以下链接 - 一个有趣的分析.查看博客文章的评论.

http://www.spoiledtechie.com/post/Whats-up-with-Stored-Procedures-these-days.aspx



6> Steve..:

优点:存储过程可用于维护数据完整性并强制实施数据库策略,而无需依赖外部程序来执行此操作.

缺点:可以使调试更复杂.如果没有正确完成,也可能对复制操作期间被丢弃敏感.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有