Compartir a través de


Almacenamiento en caché del plan de consulta (Entity SQL)

Siempre que se intenta ejecutar una consulta, la canalización de la consulta examina la memoria caché del plan de consulta para comprobar si la citada consulta ya está compilada y disponible. En ese caso, vuelve a utilizar el plan almacenado en caché en lugar de compilar uno nuevo. Si no se encuentra ninguna coincidencia en la memoria caché del plan de consulta, la consulta se compila y se almacena en memoria caché. Las consultas se identifican mediante su colección de parámetros (nombres y tipos) y texto de Entity SQL . Todas las comparaciones de texto distinguen mayúsculas de minúsculas.

Configuración

El almacenamiento en caché del plan de consulta se puede configurar a través del comando EntityCommand.

Para habilitar o deshabilitar el almacenamiento en caché del plan de consulta a través de la propiedad System.Data.EntityClient.EntityCommand.EnablePlanCaching, establezca esta propiedad en true o false, respectivamente. Si se deshabilita el almacenamiento en caché del plan en consultas dinámicas individuales que no es probable que se usen más de una vez, mejora el rendimiento.

Puede habilitar el almacenamiento en caché del plan de consultas a través de EnablePlanCaching.

Práctica recomendada

En general, se deben evitar las consultas dinámicas. El ejemplo de consulta dinámica siguiente es vulnerable a los ataques de inyección de SQL, porque toma directamente los datos proporcionados por el usuario sin efectuar ninguna validación.

"SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;

Si utiliza las consultas generadas dinámicamente, considere deshabilitar el almacenamiento en memoria caché del plan de consultas para evitar el consumo de memoria innecesario para las entradas de la memoria caché que no es probable que se vuelvan a usar.

El almacenamiento en caché del plan de consulta en consultas estáticas y parametrizadas puede proporcionar mejoras en el rendimiento. A continuación se muestra un ejemplo de consulta estática:

"SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";

Para que se encuentre una coincidencia apropiada de las consultas en la memoria caché del plan de consulta, estas deben cumplir los requisitos siguientes:

  • El texto de la consulta debe ser un modelo constante, preferentemente una cadena o un recurso constante.

  • Se debe utilizar EntityParameter o ObjectParameter siempre que se deba pasar un valor proporcionado por el usuario.

Se deben evitar los modelos de consultas siguientes, que consumen innecesariamente espacios en la memoria caché del plan de consulta:

  • Cambios en las mayúsculas o minúsculas del texto.

  • Cambios en los espacios en blanco.

  • Cambios en los valores literales.

  • Cambios en el texto incluido en los comentarios.

Vea también

Conceptos

Información general de Entity SQL