2010-08-28 14 views
6

Estoy escribiendo un software que me obliga a preparar declaraciones y establecer los valores, ejecutar la consulta y obtener resultados dentro de un ciclo. Este ciclo puede tener más de 7,000 ciclos. Si utilizo declaraciones simples en lugar de declaraciones preparadas, ¿la velocidad de ejecución cambiará mucho?¿Las declaraciones preparadas ralentizan notablemente el programa?

Aquí está el código de pseudo

  1. preparar estados
  2. Obtener una lista de alguna parte
  3. repetir la lista de
  4. obtener las declaraciones preparadas y hacer algunas consultas db y cerrar los nuevos recursos como conjuntos de resultados.
  5. pueblan un mapa usando el resultado y los valores de la lista inicial

Gracias.

+4

Las declaraciones preparadas son, por lo general, * más rápidas * que las consultas regulares si ejecuta repetidamente la misma consulta. – Amber

+3

El rendimiento es bueno, pero la verdadera victoria con PreparedStatements es que el enlace de parámetros puede hacerse a través de la API en lugar de la concatenación de cadenas. Esto es particularmente útil para los tipos de fecha. También previene ataques de inyección SQL. –

+0

@amber, hay una sobrecarga de preparación que puede tomar un tiempo para volver a comprar antes de que las declaraciones preparadas sean más rápidas en el tiempo de pared. –

Respuesta

8

Las declaraciones preparadas son MÁS RÁPIDAS que las declaraciones no preparadas si usa repetidamente la misma instrucción con varios conjuntos de datos. No tengo conocimiento de una situación en la que esto no sea cierto.

Una vez que haya preparado una declaración, se enviará al servidor de base de datos, que solo deberá aceptar los datos cada vez que la llame; no tiene que volver a procesar la declaración cada vez que enlace datos nuevos.

Así que la respuesta es sencilla:

No. Ellos no lo hacen.

+2

En realidad, si ejecuta una declaración solo una o dos veces, el tiempo de configuración de una declaración preparada podría superar la ganancia durante la ejecución :) – extraneon

+0

Quise decir en su situación en general. Su escenario propuesto fue "iterar a través de una lista". No estaba claro en mi respuesta. Edité mi publicación original para mayor claridad. – Erik

4

Solo algunas cosas que aparecieron: asegúrese de no crear las declaraciones preparadas en sus bucles. Hay algunos gastos generales implicados, pero se amortiza después de la tercera consulta más o menos. En realidad, con una gran lista de parámetros, incluso podría ser más rápido para una sola consulta.

Algo que hace que las cosas se aceleren considerablemente es ejecutar todas sus consultas en una sola transacción (o en un par de grandes). Si se trata de grandes conjuntos de datos, puede hacer 1000 consultas por transacción o algo similar. (Por supuesto, la semántica de su modelo de dominio debe permitir esto, pero en mi experiencia, eso es casi siempre el caso).

El número de consultas que puede agrupar en una sola transacción depende en cierta medida de la base de datos, por lo que es posible que se requiera algo de experimentación y lectura.

1

También puede considerar la recuperación de múltiples valores por estado:

SELECT id, value FROM table WHERE id IN (?, ?, ?, ?, ?, ?)

Esto será más rápido que las consultas individuales.

+0

Esto es exactamente lo que estaba haciendo. – mwangi

+0

Mi punto era que podría recorrer la lista en pasos de 10 o más elementos por llamada a la base de datos. –

Cuestiones relacionadas