单个存储过程调用还是多个数据库调用?

时间:2016-08-17 12:10:13

标签: sql database model-view-controller database-design database-performance

我正在开发一个MVC应用程序,其中视图可以使用存储过程调用来获取数据,该存储过程调用具有多个不同的查询或直接从模型中单独调用它们。我真的很困惑哪种方法是一种好的做法?

由于

1 个答案:

答案 0 :(得分:1)

我几乎在所有情况下都会对存储过程进行一次调用(最后我将讨论异常)。

<强>理由:

  • 维护存储过程的人可能会引入一些额外的逻辑(无论是出于性能原因还是业务原因),您必须在自己的直接呼叫中复制,或者 - 更糟糕的是 - 由于与任何人的错误传达而可能完全错过维护存储过程。 (即使你同时维护这两者,你也必须花费精力进行复制)。 这是第一个原因:使用专用接口可确保正确性并避免重复
  • 每次与数据库交互时,都会产生很小的(但不是空的)开销来打开连接(或从池中检索它),通过线路编组和解组数据,网络延迟等等。拥有一个入口点(您的存储过程)将更好地摊销这些。
  • 数据库引擎可以通过在单个事务上下文中包含所有内容来进一步优化其工作负载(但它确实取决于许多不同因素,因此不能保证任何事情)。即也许它会发出两个连续的查询,这些查询足够相似,一些索引/记录在数据库缓存中缓存,因此可以通过第二个查询更快地访问。)

可能的例外:您的应用程序有一种&#34;缩放&#34;首先加载多记录结构标题的过程,只有当用户需要时才需要较低级别的详细信息。在这种情况下,最好在运行中访问这些。我仍然更喜欢以前的解决方案,除非我能证明(即使用实际负载测试)细节记录足够大以使其成为前端的负担。 除非你有足够的数据来备份你的“洞察力”,否则请抵制以这种方式决定效率更高的诱惑。大部分时间都是prove to be a mistake