查询与存储过程;两种方法之间的差异

时间:2011-02-09 05:01:48

标签: .net sql sql-server sql-server-2005

我正在开发一个搜索网页。我有两个选项来构建这个页面

  1. 根据用户输入的参数在页面上构建查询并将其发送给服务器。

  2. 将参数发送到存储过程并在那里构建查询并将其执行。

  3. 我想知道我应该采用哪种方法以及为什么。

    我想知道这两种方法的优点或缺点。

8 个答案:

答案 0 :(得分:1)

从我的旁边商店程序会很好。

  1. 存储过程不会一次又一次地编译,每次简单的Query编译然后执行。

  2. 存储过程执行服务器端,这就是它减少网络流量的原因。 SQL查询也会在服务器上执行,但如果您有大查询,则需要更多时间 比较存储过程从客户端到服务器的遍历。

答案 1 :(得分:0)

我无论如何都不是数据库专家,但我的经验是存储过程适用于封装长时间不变的固定查询。但是它很难维护,至少它是在我这样做的那一天,因为没有办法让存储过程保持在版本控制之下,并且像服务器一样执行rsync。因此,维护只是动态构建查询更容易,因为我可以在单个脚本或修订控制下的单个脚本组中进行所有必要的更改。在这方面可能已经发生了变化,存储过程可以更好地与您的代码库集成;在这种情况下,存储过程可能会使您的代码更易于管理和维护。

答案 2 :(得分:0)

使用存储过程。不是因为它们更快,而是因为它们强制与数据库签订合同(给存储过程提供这些参数,它将返回数据)。

让应用决定如何处理数据,例如在UI中显示。让存储过程决定如何插入/更新/删除/检索数据。

在多个前端重用存储过程中的查询/逻辑也更容易。

答案 3 :(得分:0)

通过从前端传递查询,sql注入的可能性增加。 在查询首次编译时执行存储过程而不是执行,因此语法错误的可能性增加

答案 4 :(得分:0)

我采用存储过程方法,因为它易于维护且易于拍摄。

答案 5 :(得分:0)

通过使用SQL查询,我们实际上在可能被更改的代码中公开了我们的数据库设计模式(设计)。所以我们使用存储过程,它是预编译的可执行对象,可以包含一个或多个sql语句。因此,存储过程是复杂SQL语句的副本。可以编写存储过程来接受输入和返回输出。

答案 6 :(得分:0)

如果只是谨慎使用查询,则adhoc查询可能是一个选项。在几乎所有其他场合,最好通过存储过程。

另请考虑将optimize for ad hoc workloads option设置为1.以下内容来自msdn

  

ad hoc workloads的优化选项用于提高包含许多单次使用ad hoc批处理的工作负载的计划缓存的效率。当此选项设置为1时,数据库引擎会在第一次编译批处理时在计划缓存中存储一​​个小的已编译的计划存根,而不是完整的已编译计划。这有助于缓解内存压力,因为不允许计划缓存填满未重用的已编译计划。

参考文献:

  1. optimize for ad hoc workloads Server Configuration Option
  2. Why would I NOT use the SQL Server option “optimize for ad hoc workloads”?

答案 7 :(得分:-1)

使用存储过程总是更好。

1)如果您的查询很长,它将消耗您的网络资源。当我们通过网络连接发送大型SQL查询时,它会增加网络流量。

2)存储过程是预先编译和存储的,因此速度更快。

3)当您想要修改查询时,它也很容易管理。