Tenho uma consulta que seleciona valores distintos de uma tabela e notei que o tempo de execução diminuiu significativamente após a execução inicial.
Aqui está a consulta e o plano de execução correspondente que obtive quando executei a consulta pela segunda vez.
EXPLAIN ANALYZE SELECT DISTINCT integration_type FROM my_schema.my_table;
Unique (cost=0.43..576843.69 rows=7 width=2) (actual time=0.032..2826.863 rows=8 loops=1)
-> Index Only Scan using my_index on my_schema.my_table (cost=0.43..538707.38 rows=15254521 width=2) (actual time=0.031..1881.219 rows=14730886 loops=1)
Heap Fetches: 1381786
Planning Time: 0.557 ms
Execution Time: 2826.897 ms
Pela primeira vez executei a consulta, demorou mais de 30 segundos. No entanto, as execuções sucessivas demoraram consistentemente menos de 3 segundos, embora o número de buscas de heap permanecesse o mesmo e não mudasse (ainda 1.381.786).
Estou curioso para entender por que o tempo de execução diminuiu para execuções sucessivas, apesar das buscas de heap inalteradas. Isso poderia estar relacionado a mecanismos de cache ou outras otimizações que o PostgreSQL emprega?
Estou usando o PostgreSQL versão 14.9
Quaisquer insights ou sugestões sobre por que esse comportamento ocorre e como posso otimizar ainda mais a consulta ou as configurações do banco de dados serão muito apreciados.
Obrigado.