【发布时间】:2010-07-15 14:11:40
【问题描述】:
我有一个 Web 应用程序,其中 Web 服务器和 SQL Server 2008 数据库位于同一服务器场中的不同机器上。
如果我将一个单一的存储过程分解为几个较小的存储过程,从而使客户端代码负责调用多个存储过程而不仅仅是一个,我会注意到在我的网络应用程序?
其他背景信息:
我有一个包含数百行代码的存储过程,其中包含决策逻辑、更新语句,最后是一个将一组数据返回给客户端的选择语句。
我需要在调用组件 DLL 的客户端代码(从这个意义上说,客户端代码是调用数据库服务器的 ASP Web 服务器)中插入一个功能。但是,存储过程正在更新记录集并在同一调用中返回更新的数据,理想情况下,我的代码需要在调用决策逻辑和更新语句之后调用,但 之前 /em> 数据返回给客户端。
为了让这个功能发挥作用,我可能不得不将现有的存储过程分成至少两部分:一个更新数据库的存储过程,另一个从数据库中检索数据的存储过程。然后我会在这些存储的过程调用之间插入我的新代码。
当我看到这个问题时,我不禁认为,从代码维护的角度来看,将我的更新和select语句隔离所有会更好存储过程并将业务逻辑留给客户端代码。这样,每当我需要在客户端代码中插入功能或决策逻辑时,我所需要做的就是更改客户端代码,而不是修改一个巨大的存储过程。
虽然从代码维护的角度来看,使用精简存储过程可能会更好,但是通过增加访问数据库的次数我会遇到多大的性能问题?数据的最终结果是相同的,但我更频繁地接触数据库。当扩展应用程序以满足需求时,这种方法对性能有何影响?
我不是一个将性能优化置于一切之上的人,尤其是当它影响代码维护时,但我不想在 Web 应用程序必须扩展时自责并造成头痛。
【问题讨论】:
标签: sql-server performance stored-procedures code-maintainability