Esses comandos fazem duas coisas:
- Limpe o cache da página, que armazena as páginas de dados que já foram recuperadas do disco (normalmente o maior fator no tempo em uma consulta é o acesso ao disco)
- Limpe o cache do plano de consulta, o que significa que o servidor precisa criar um novo plano de consulta. Normalmente, isso não é significativo, exceto por volumes de transações muito altos.
Você está basicamente tendo um tempo equivalente ao cenário "pior dos casos" - você acabou de reiniciar o servidor e nada está na memória. Execuções subsequentes não precisam pagar o custo para extrair os dados do disco, pois essas páginas já estão carregadas na memória.
Isso é semelhante a uma situação do mundo real - seu primeiro usuário a executar uma consulta específica provavelmente terá que esperar mais do que nas execuções subsequentes, supondo que você esteja verificando os mesmos dados.
Um bom método que eu gosto de usar é executar várias vezes e fazer uma média. Isso é especialmente útil em um ambiente compartilhado, pois você não tem controle total sobre recursos compartilhados, como tempdb.
Você também pode usar estes comandos para obter mais informações sobre o que realmente está acontecendo nos bastidores:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Isso fornecerá informações detalhadas sobre leituras de páginas do disco (por objeto), leituras lógicas de páginas, tempo gasto na compilação de um plano e tempo gasto na execução de uma consulta.