Esos comandos hacen dos cosas:
- Borre la memoria caché de la página, que almacena páginas de datos que ya se han recuperado del disco (normalmente el factor más importante en el tiempo en una consulta es el acceso al disco)
- Borre la caché del plan de consulta, lo que significa que el servidor necesita crear un nuevo plan de consulta. Esto normalmente no es significativo, excepto para volúmenes de transacciones muy altos.
Básicamente, está obteniendo un tiempo equivalente al "peor de los casos": acaba de reiniciar el servidor y no hay nada en la memoria. Las ejecuciones posteriores no necesitan pagar el costo para extraer los datos del disco ya que esas páginas ya están cargadas en la memoria.
Esto es similar a una situación del mundo real: es probable que su primer usuario que ejecute una consulta en particular tenga que esperar más tiempo que en las ejecuciones posteriores, suponiendo que esté verificando los mismos datos.
Un buen método que me gusta usar es correr varias veces y tomar un promedio. Esto es especialmente útil en un entorno compartido ya que no tiene control total sobre los recursos compartidos como tempdb.
También puede usar estos comandos para obtener más información sobre lo que realmente sucede detrás de escena:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Estos le proporcionarán información detallada sobre las lecturas de página del disco (por objeto), las lecturas lógicas de página, el tiempo dedicado a compilar un plan y el tiempo dedicado a ejecutar una consulta.