Stored procedures 存储过程-一般或特定

Stored procedures 存储过程-一般或特定,stored-procedures,Stored Procedures,在以下两种方法之间使用存储过程的首选方法是什么?为什么: 一个通用SP,如“GetOrders”,它返回表Order的所有列。应用程序的几个不同部分将使用同一SP 或 几个更具体的SP,如“GetOrdersForUse1”和“GetOrdersForUse2”,它们返回所有列的子集。每个SP仅由应用程序的一部分使用 在一般情况下,应用程序将只使用SP返回的列的子集。出于性能原因,我考虑使用特定的方法,但这真的值得额外的工作吗?我正在使用ASP.NET和SQL 2005开发一个网站。就像它所依赖

在以下两种方法之间使用存储过程的首选方法是什么?为什么:

一个通用SP,如“GetOrders”,它返回表Order的所有列。应用程序的几个不同部分将使用同一SP

几个更具体的SP,如“GetOrdersForUse1”和“GetOrdersForUse2”,它们返回所有列的子集。每个SP仅由应用程序的一部分使用


在一般情况下,应用程序将只使用SP返回的列的子集。出于性能原因,我考虑使用特定的方法,但这真的值得额外的工作吗?我正在使用ASP.NET和SQL 2005开发一个网站。

就像它所依赖的所有伟大事物一样。您的变体中的逻辑有多大不同。例如,如果唯一的区别是返回列,那么您所节省的只是网络上的一些带宽和一些内存,这两者都比创建变体、测试和维护变体所需的时间便宜得多

现在,如果存在非常显著的不同选择逻辑(连接不同的表等),那么最好使用专门的SP


最后一件事不要过早优化。先简单地构建它,然后当你发现你需要额外的毫秒时,你可以考虑调整

我会选择你的第二个选择,因为你不应该从数据库中提取你不需要的数据(行或列)-这会给DBMS带来不必要的压力,并通过网络传输无用的数据,浪费网络带宽。

将它们视为函数,如果要编写一个单独的函数,那么可能需要使用单独的存储过程。如果还有任何疑问,请使用单独的存储过程,因为:

  • 它将拯救班德维思
  • 这将节省内存

我发现单独的存储过程比一个大型存储过程更容易维护。

带宽/内存在我看来非常重要。SP编写/测试一次(或很少),运行多次。因此,编写/测试的成本趋于零。你关于优化的观点很好——在锁定所有查询,然后将SQL转移到后端之前,我不会使用SPs。当你进入优化阶段时,它们很重要。虽然一个或两个SP可能不错,但相信我,当您在一个数据库中访问8000个SP时,您知道有些地方出了问题(特别是当您开始查找重复项时,因为您有这么多重复项),我有使用大型机DB2的优势—所有SQL查询和存储过程都经过伟大的DB2 DBA神的审查,他们将对其进行优化(包括组合重复)。你是对的,但是,8000是可怕的!