La parte más importante del proceso de compilación es la creación del plan de consulta.
El plan de consulta, como su nombre indica, indica cómo la base de datos debe ejecutar la consulta (por ejemplo, qué índices usar, los tipos de combinación a utilizar, como anidamiento-bucle/hash/fusión, etc.). Esto puede llevar tiempo ya que la base de datos necesita analizar la información en las tablas para adivinar qué es lo óptimo (por ejemplo, tamaños de tabla, índices disponibles, cuán específicos son los índices, etc.).
Si bien las declaraciones preparadas pueden ahorrar tiempo, debe tener cuidado ya que a veces pueden hacer que su programa sea más lento. ¿Por qué? Porque al no proporcionar los valores de la cláusula where como parte de la compilación, la base de datos tiene que adivinar los valores que va a proporcionar y puede elegir valores que conduzcan a un plan de consulta que no le resulte óptimo.
Esto puede ser más evidente para las consultas de rango. Por ejemplo, supongamos que crea una declaración preparada con fechas mínimas y máximas como parámetros. Esta consulta la usará para recuperar algunos días de transacciones. Dado el pequeño intervalo de fechas, esta consulta puede ser más eficiente de ejecutar si la base de datos utiliza la fecha del índice no agrupado.
Sin embargo, dado que la base de datos no sabe qué parámetros suministrará la base de datos puede optimizar para un rango de fechas mucho mayor (por ejemplo, un año o más), que puede ser más eficiente de ejecutar usando un escaneo de tabla. En este caso, usar la declaración preparada ralentizaría su programa (a menos que proporcione una pista a la base de datos sobre los parámetros para optimizar o explícitamente indique qué índices usar).
Por supuesto, si en la declaración preparada los parámetros que proporcionará apuntarán a registros individuales (por ejemplo, claves únicas en las tablas), la base de datos realmente no puede fallar al crear el plan de consulta.
Creo que estoy tratando de enfatizar que aquí hay pros y contras. Los estados preparados pueden ser más rápidos en algunas situaciones, pero debe tener cuidado.
buen detalle acerca de la pre-compilación: [http://stackoverflow.com/questions/5497297/what-does-pre-compiling-a-jdbc-preparedstatement-do][1] [1]: http: // stackoverflow.com/questions/5497297/what-do-pre-compiling-a-jdbc-preparedstatement-do – Awan