直接Sql还是在程序中组合它?哪个更有效率

时间:2011-04-19 07:49:56

标签: sql-server

在我最近的主题中,我必须通过动态SQL做一些查询,但我很好奇 效率的方式不同:

1)将我的服务器中的sql语句组合起来,然后将它们发送到数据库,进行查询

2)将我的变量发送到数据库并在某个程序中合并它们,最后进行查询

希望有人能帮助你 BTW(我使用.Net和Sqlserver)

2 个答案:

答案 0 :(得分:2)

首先,您应该做的主要事情之一是参数化您的SQL - 无论是将其作为存储过程包装在数据库中,还是通过在应用程序代码中创建SQL语句然后解雇整个事物进入DB。这意味着:

  • 通过不将用户输入的值直接连接到SQL语句中来防止SQL注入攻击
  • 执行计划重用(该查询的后续执行,无论参数值如何,都能够重用原始执行计划)(注意:如果没有自己参数化,可以通过Forced Parameterisation

存储过程确实提供了一些额外的好处:

  • 安全性,只需要向存储过程授予EXECUTE权限,您不需要授予用户对底层数据库表的直接访问权

  • 可维护性,对查询的更改不涉及应用程序代码更改,您只需更改数据库中的sproc

  • 网络流量,不一定是主要的一点,但你通过网络发送更少,特别是如果查询非常大/复杂

就个人而言,我大部分时间都使用存储过程。虽然我需要在应用程序代码中动态构建SQL,但它始终是参数化的。

答案 1 :(得分:0)

最好是使用存储过程并从应用程序传递参数,因为存储过程是预编译的查询并准备好执行计划,这样可以节省大量时间。

您可以引用此详细信息http://mukund.wordpress.com/2005/10/14/advantages-and-disadvantages-of-stored-procedure/

快乐的编码!!