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

Por que o PostgreSQL executa varredura sequencial na coluna indexada?


Se o SELECT retornar mais do que aproximadamente 5-10% de todas as linhas da tabela, uma varredura sequencial será muito mais rápida que uma varredura de índice.

Isso ocorre porque uma verificação de índice requer vários Operações de E/S para cada linha (procure a linha no índice e recupere a linha do heap). Considerando que uma varredura sequencial requer apenas um único IO para cada linha - ou até menos, porque um bloco (página) no disco contém mais de uma linha, portanto, mais de uma linha pode ser buscada com uma única operação de IO.

Btw:isso também é verdade para outros DBMS - algumas otimizações como "varreduras apenas de índice" deixadas de lado (mas para um SELECT * é altamente improvável que um DBMS vá para uma "varredura apenas de índice")