sql >> Base de Datos >  >> RDS >> Sqlserver

Pregunta de caché de SQL Server

Cuando realiza su consulta, los datos se leen en la memoria en bloques. Estos bloques permanecen en la memoria pero se "envejecen". Esto significa que los bloques se etiquetan con el último acceso y cuando Sql Server requiere otro bloque para una nueva consulta y la memoria caché está llena, el bloque utilizado menos recientemente (el más antiguo) se elimina de la memoria. (En la mayoría de los casos, los bloques de escaneo de tablas completas envejecen instantáneamente para evitar que los escaneos de tablas completas sobrecarguen la memoria y obstruyan el servidor).

Lo que sucede aquí es que los bloques de datos en la memoria de la primera consulta aún no se han eliminado de la memoria, por lo que se pueden usar para su segunda consulta, lo que significa que se evita el acceso al disco y se mejora el rendimiento.

Entonces, lo que realmente está preguntando es "¿puedo obtener los bloques de datos que necesito en la memoria sin leerlos en la memoria (realmente haciendo una consulta)?". La respuesta es no, a menos que desee almacenar en caché las tablas completas y hacer que residan en la memoria de forma permanente, lo que, por el tiempo de consulta (y, por lo tanto, el tamaño de los datos) que está describiendo, probablemente no sea una buena idea.

Su mejor apuesta para mejorar el rendimiento es observar sus planes de ejecución de consultas y ver si cambiar sus índices podría dar un mejor resultado. Hay dos áreas principales que pueden mejorar el rendimiento aquí:

  • crear un índice donde la consulta podría usar uno para evitar consultas ineficientes y escaneos completos de tablas
  • agregar más columnas a un índice para evitar una segunda lectura de disco. Por ejemplo, tiene una consulta que devuelve las columnas A y B con una cláusula where en A y C y tiene un índice en la columna A. Su consulta usará el índice para la columna A que requiere una lectura de disco pero luego requiere un segundo disco haga clic para obtener las columnas B y C. Si el índice tiene todas las columnas A, B y C, se puede evitar el segundo disco para obtener los datos.