2011-04-28 10 views

Respuesta

10

, Prepare method is actually on DbCommand, que recogerá todas las clases que deriven de ella.

Lo que hace es específico para el proveedor de base de datos que el DbCommand es para. Sin embargo, es seguro decir (aunque no es una regla absoluta) que en la mayoría de los lugares, si el comando es un procedimiento almacenado, producirá una operación no (está documentado como tal para el override of Prepare on SqlCommand), ya que los procedimientos almacenados normalmente tienen su consulta planes optimizados debido a llamadas previas, llamadas explícitas para optimizar o en la creación (nuevamente, dependiendo de la base de datos subyacente).

Sin embargo, si usted es no utilizando un procedimiento almacenado, sino más bien una consulta parametrizada generada sobre la marcha, esta llamada dará a la base de datos subyacente la oportunidad de generar una versión optimizada de la consulta.

Normalmente haría esto cuando sepa que va a ejecutar el comando varias veces en un corto período de tiempo (depende, realmente, de la base de datos y de cuánto tiempo se guardan en caché los planes de consulta). Debe decirse que SQL Server (a partir de 2005, IIRC) almacena en caché planes de consulta parametrizados dependiendo del uso después de la primera ejecución (creo que el caché es un caché degradado que se reestablece o tiene su velocidad de caída disminuida usos posteriores), por lo que si va a realizar varias llamadas con la misma consulta parametrizada, puede que no gane mucho con una llamada al Prepare que no sea mover el trabajo de preparación de la consulta por adelantado (lo que también podría ser un beneficio, dependiendo de qué el trabajo es lo que tienes que realizar).

+1

Cuando utiliza procedimientos almacenados varias veces con diferentes parámetros, utilizo Preparar método. Si solo cambia los parámetros, el resultado seguirá siendo el del primer conjunto de parámetros. No sé si esta es la mejor manera de hacerlo, pero de todos modos este método no es una operación no operativa cuando se usa en un procedimiento almacenado. (La documentación dice que puede ser, no que no sea operativo). – pikachu

2

Normalmente, cuando ejecuta una consulta, se toma todo el camino desde el análisis de la cadena hasta la ejecución del plan de ejecución. Si llama al Prepare, llevará el proceso lo más lejos posible hacia la ejecución, sin ejecutar realmente el plan de ejecución.

Esto es útil cuando se ejecuta el mismo comando una y otra vez. Ahorrará tiempo de ejecución, ya que no es necesario repetir todo el proceso cada vez.

7

Mucha más información se puede encontrar here.

Sin embargo, tener en cuenta:

En SQL Server, el Preparar/Ejecutar modelo no tiene un rendimiento significativo ventaja sobre la ejecución directa, debido a la forma de SQL Server reutiliza planes de ejecución. SQL Server tiene algoritmos eficientes para hacer coincidir las sentencias SQL actuales con los planes de ejecución que se generan para las ejecuciones anteriores de la misma instrucción SQL. Si una aplicación ejecuta una instrucción SQL con marcadores de parámetros varias veces, SQL Server reutilizará el plan de ejecución de la primera ejecución para la segunda y posteriores ejecuciones (a menos que el plan de edades desde el caché de procedimientos). El Preparar/Ejecutar modelo todavía tiene estos beneficios :

la búsqueda de un plan de ejecución por un mango identificar es más eficiente que los algoritmos utilizados para coincidir con una sentencia SQL para planes de ejecución existentes.

La aplicación puede controlar cuándo se crea el plan de ejecución y cuándo se vuelve a utilizar .

El modelo de preparación/ejecución es portátil a otras bases de datos, incluidas las versiones anteriores de de SQL Server.

Cuestiones relacionadas