Charly,

> É por ai mesmo. Na verdade, você pode ter os 50 índices na tua tabela,
mas
> quando for consultá-la o SGBD vai eleger UM índice a ser utilizado para a
> consulta. Logo, ter 50 índices não é garantia de melhoria na performance
da
> pesquisa, mas alguns índices bem planejados vão com certeza ajudar.
> 
> Resumindo, a cada consulta o SGBD elege APENAS UM índice da entidade para
> ser utilizado na consulta.

Contra-exemplo trivial:

--Cidades do Acre com homônimos em outro estado:
select distinct c2.nomecidade
from tbcidade c2 
inner join tbcidade c on c.nomecidade = c2.nomecidade and c.uf<>c2.uf
where c2.uf='AC' 

Esta consulta me gerou o seguinte plano:

"HashAggregate  (cost=106.66..106.88 rows=22 width=13)"
"  ->  Nested Loop  (cost=2.43..106.60 rows=26 width=13)"
"        Join Filter: ((c.uf)::text <> (c2.uf)::text)"
"        ->  Bitmap Heap Scan on tbcidade c2  (cost=2.43..28.09 rows=23
width=16)"
"              Recheck Cond: ((uf)::text = 'AC'::text)"
"              ->  Bitmap Index Scan on i1tbcidade  (cost=0.00..2.42 rows=23
width=0)"
"                    Index Cond: ((uf)::text = 'AC'::text)"
"        ->  Index Scan using a1tbcidade on tbcidade c  (cost=0.00..3.40
rows=1 width=16)"
"              Index Cond: ((c.nomecidade)::text = (c2.nomecidade)::text)"

E olha que nem precisei apelar para mais de uma tabela, UNIONs, EXISTS,
filtros com OR ou sub-selects!

Como pode ver, o otimizador notou, pela distribuição dos dados, que compensa
usar um índice diferente para cada citação da tabela dentro da mesma
consulta (i1tbcidade e a1tbcidade). Não sei se só eu noto isso, mas a
maioria das querys com sub-selects ou cláusulas EXISTS que observei na minha
aplicação usam índices diferentes para a mesma tabela.

Logo, no meu caso, ter um monte de índices na mesma tabela compensa sim, e
muito.

Atenciosamente,

Mozart Hasse


_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a