通常我们都建议客户使用存储过程来访问数据库中的表。 原因如下:
-
存储过程提供了封装查询的一种简洁机制。
-
修改查询可以在不改变数据访问代码的情况下进行。
-
DBA 可以很容易地看到正在执行什么 SQL 语句。
-
存储过程一般更安全,对数据库访问的控制也更容易。
-
使用存储过程,可通过在存储过程中发送多个请求,避免与客户端的多次往返行程。
-
存储过程与中间层生成的 SQL 相比,通常能提供最佳性能。
-
存储过程提供了极好的封装 XML 查询和 XML 输入参数的方式。
存储过程的缺点在于,它们往往是专有的,不能跨平台移植。
然而,要想最大程度地利用在数据库软件和硬件上已经花费的投资,开发人员往往对应用程序中使用的 SQL 针对具体数据库引擎进行优化,无论 SQL 是在存储过程中还是在中间层生成的。 这一点有一个很好的例子,就是唯一编号或者标识编号的生成,因为所有数据库执行此操作时都支持自己的特殊机制,所以用来生成唯一编号的 SQL 就往往是特定于所用数据库的。 一般总是有替代方案的,但是它们的执行速度都比不上专有解决方案。
对于 .NET Pet Shop,我们有意识地没有在应用程序使用存储过程,因为这在 Middleware 基准测试中会被看作是 .NET 解决方案一种不太公平的优势。 实际上,这方面的性能差异很小,因为应用程序相对比较简单,大多数 SQL 语句的执行计划都缓存在数据库中了。 但是, Middleware 基准测试规范不允许使用存储过程,哪怕只是包装简单的 SQL 语句,因此 .NET Pet Shop 3.0 没有使用存储过程。
来源:https://www.cnblogs.com/jiayongmao/archive/2009/07/30/1535275.html