2010-11-04 9 views
10

Hay una determinada consulta que se llama desde una página ASP .NET. Estudié el plan de ejecución de esa consulta en Management Studio y el 87% es para un tipo. Necesito desesperadamente la clasificación o de lo contrario los datos mostrados no tendrían sentido.¿Puedo solicitar que SQL Server almacene en caché un determinado conjunto de resultados?

¿Hay alguna forma de que pueda solicitar que SQL Server almacene en caché un conjunto de resultados ordenados para que los datos vuelvan más rápido en las ejecuciones siguientes?

¿O es SQL Server lo suficientemente inteligente como para hacer el manejo de la memoria caché y estoy cometiendo un error al intentar forzarlo a los resultados de la caché, si eso es posible?

Cualquier información relevante será muy apreciada y muchas gracias de antemano :)

ACTUALIZACIÓN:
acabo de leer en un artículo que la creación de una vista con un índice agrupado aumentará el rendimiento debido a que el índice se persistir los datos en una vista en el disco. ¿Es esto cierto? ¿Cómo puedo hacer esto? ¿Algún artículo?

Respuesta

11

En resumen, no: no en el extremo del servidor SQL; por supuesto, cargará los datos en la memoria si es posible y guardará en caché el plan de ejecución - por lo que las llamadas posteriores pueden ser más rápidas, pero no puede almacenar en caché los resultados.

Opciones:

  • afinar el plan; el género suena agresivo: ¿podría quizás desnormalizar algunos datos o agregar un índice (quizás incluso un índice agrupado)? puede haber otras cosas que podemos hacer con la consulta si muestra (pero de sintonía sin una base de datos totalmente funcional es guestimation en el mejor)
  • caché los resultados en el servidor web si es sensato hacerlo
1

Una opción que se utiliza a veces es almacenar los datos clasificados en una tabla secundaria. Esto podría, p. ser una tabla temporal que cree solo para la sesión, o una tabla de caché para toda la base de datos.

11

mientras puede crear una indexed view, como usted alude en su actualización, debe tener en cuenta que:

  1. hay un buen montón de reglas que tiene que seguir, tanto en el momento de crear la vista y al actualizar las tablas en las que se basa y,
  2. El hecho de que exista un índice (agrupado), que no implique un orden de clasificación, aún tendría que usar un ORDER BY al consultar esta tabla, y,
  3. A menos que esté utilizando la edición Enterprise , debe consultar la vista con WITH (NOEXPAND) query hint
  4. Debería especificar el orden del índice especificando ASC y DESC en la instrucción CREATE INDEX, no en CREATE VIEW. El "truco" para permitir ORDER BY en una vista (al especificar el 100 por ciento superior) no tendría ningún efecto.
+0

increíble! Gracias por la información :) –

1

Una vez más, el propio servidor SQL almacenará en caché las consultas frecuentes en la memoria. Puede probar esto utilizando el analizador de consultas y ejecutando una consulta compleja varias veces, cada vez que se acelerará. Dado esto, puede que no sea necesario un caché permanente.

Si es así, recomiendo usar una tabla de caché y ejecutar su consulta e insertar los valores en la otra tabla. Puede usar una variable de aplicación u otra tabla sql para determinar cuándo renovar la caché nuevamente.

Consulta de ejemplo para su inserción en la tabla de caché:

Insertar en la caché Seleccione Valor, Valor de la Tabla 1 Ordenar por campo

Cuestiones relacionadas