2011-04-28 137 views

回答

10

Prepare method is actually on DbCommand,所有从它派生出来的类都会拿起。

它的作用是针对DbCommand适用的数据库提供程序。然而,可以肯定地说(尽管不是绝对的规则),在大多数地方,如果命令是存储过程,它将产生一个无操作(它被记录为override of Prepare on SqlCommand),因为存储过程通常有它们的查询由于之前的调用,明确的优化调用或创建(再次取决于底层数据库),优化了计划。

但是,如果您使用的是存储过程而不是而不是,而是实时生成的参数化查询,则此调用将为底层数据库提供生成查询优化版本的机会。

当您知道要在很短的时间内(它实际上取决于数据库以及查询计划缓存的时间)多次执行命令时,通常会这样做。

应该说SQL Server(截至2005年,IIRC)在第一次执行后根据使用情况对参数化查询计划进行高速缓存(我认为高速缓存是时间降级的高速缓存,其重置或衰减速度放慢所以如果你打算用同样的参数化查询进行多个调用,那么除了调用查询准备工作之外,你可能没有太多的调用Prepare(这也可能是一个好处,取决于什么工作是你必须执行的)。

+1

当您使用不同的参数多次使用存储过程时,我使用Prepare方法。如果你只是改变参数,结果仍然是第一组参数的结果。我不知道这是否是最好的方式,但无论如何,这个方法在存储过程中不是无用的。 (文件说它可以,而不是它是没有操作的。) – pikachu 2013-10-26 15:29:27

2

正常情况下,当您执行查询时,会从解析字符串到运行执行计划。通过调用Prepare,它将尽可能地执行过程,而无需实际运行执行计划。

当反复运行相同的命令时,这非常有用。您将节省一些执行时间,因为整个过程不必每次重复。

7

更多相关信息请登录here

但是,请记住:

在SQL Server中,准备/执行 模型没有显著的性能 在直接执行的优势, 因为这样的SQL Server重用 执行计划。 SQL Server具有 高效算法用于匹配 当前SQL语句与执行 为以前的 生成的计划执行相同的SQL语句。 如果应用程序执行SQL语句 与参数标记 多次,SQL Server将重用 执行计划从第一 执行第二和 后续执行(除非该计划从过程缓存 年龄)。该 准备/执行模型还具有以下优点 :

由 识别手柄找到一个执行计划比用于匹配 SQL语句来执行现有计划 算法更高效 。

应用程序可以控制何时创建执行计划以及何时重用它的执行计划 。

准备/执行模型是可移植的 到其他数据库,包括早期的 版本的SQL Server。

相关问题