今天我们技术总监说我用太多的存储过程了,觉得还是写成SQL语句来执行比较好??但是微软说使用存储过程可以提高性能和安全性能的呢??怎么突然说一个数据库中存储过程太多反而为影响性能的。这里要提一下,我是做网站的,总监说我这样做服务器压力会很大,这让我更不解了,存储过程不是已经在你创建的时候都编译好的,执行的速度不会影响的啊??大家觉得呢??
一、在SQL Server中存储过程不会影响性能。1、只会大大的减轻服务器的压力,而不会增加,只有不合理的存储过程才会造成服务器性能下降的恶果。一个大型的数据库,一般存储过程也不会超过几千个,对当前的数据库及它依附的硬件来说,这点儿负载是大象身上的老鼠,负载基本可以怱略不计。2、但是,存储过程是批量的SQL语句的合成,如果设计上混乱,引发死循环、死锁、大范围查询、临时表没有及时清理释放等问题的情况下,是会严重影响服务器性能的,但这根子不在存储过程上,而在于存储过程的设计上。错误的SQL代码指挥服务器,无论它的形式是存储过程,还是客户端及时发向数据库的请求,都会使服务器出现问题。二、相关扩展1、在当前,针对数据库的编程设计,没有存储过程是不可想象的,这就象某个公司的大型货品仓库中没有仓库保管员一样,所有的货品进出都得进货员或销售员去临时取放,会严重降低工作效率。2、存储过程在数据库中无论是否编译好,其效率都要比客户端临时向数据库发送指令调数据来得要高,因为至少减少了发向服务器的指令的量。况且很多的中间值、临时值如果不通过存储过程来实现的话,就只能先全取到客户端,这样会大大增加网络负担与服务器的负钽。3、正如微软所说,存储过程来实现,可以使得很多中间量不必传入到客户上,客户端只能得到需要的结果,所以同时可以提高安全。
个人感觉,影响服务器性能的看你的查询,就算你有1万个存储过程,但是从来不用,应该对系统性能没有什么影响吧,如果你在程序里写的语句,和在存储过程写的语句一样,在性能的考虑上还是写存储过程好点。但是如果你的功能,用个简短点的语句查询出来,再在程序里做一些循环等函数,就可以实现的功能,你非的做个超级复杂的存储过程来实现前台最后的效果,这样的就浪费服务器的性能了,你的技术总监应该是说这样的存储过程不要太多了吧。个人想法只共参考。
1.设计得不好的存储过程对数据库性能影响很大,能让服务层干的事情,为什么要交到数据库层呢?不理解。看了上面这位最佳答案,他的说法可以理解为:不影响一条指定业务的整体性能,然而却把大量负载加在了数据库上,为什么要将一个系统的大量运算放到数据库呢?2.再说设计问题,现如今技术日新月异,业务不断推陈出新,各种需求让设计开发人员应接不暇,做一个好的设计并非不可能,然而,如果一个业务场景使用不到几天时间就废弃,我们有必要浪费个把月去设计这东西么?当然对于万年不变的系统还是需要好好设计一番的。