PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Melhorando a velocidade da consulta:SELECT simples na grande tabela postgres


Extraindo meus comentários em uma resposta:a pesquisa de índice aqui foi muito rápida - todo o tempo foi gasto recuperando as linhas reais. 23 segundos/7871 linhas =2,9 milissegundos por linha, o que é razoável para recuperar dados espalhados pelo subsistema de disco. As buscas são lentas; você pode a) ajustar seu conjunto de dados na RAM, b) comprar SSDs ou c) organizar seus dados com antecedência para minimizar as buscas.

O PostgreSQL 9.2 tem um recurso chamado varreduras somente de índice que permite (geralmente) responder a consultas sem acessar a tabela. Você pode combinar isso com o btree index propriedade de manter a ordem automaticamente para tornar essa consulta rápida. Você menciona int1 , int2 , e dois carros alegóricos:
CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);

SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index

Observe também que isso não apaga magicamente as buscas do disco, apenas as move do tempo de consulta para o tempo de inserção. Também custa espaço de armazenamento, pois você está duplicando os dados. Ainda assim, esta é provavelmente a troca que você deseja.