2016-03-11 16:31 GMT-03:00 Danilo Silva <danilo.dsg.go...@gmail.com>:
> Existe diferença entre criar índices assim: > CREATE INDEX foo_c1_idx ON foo (campo1); > CREATE INDEX foo_c2_idx ON foo (campo2); > > ou assim: > CREATE INDEX foo_idx ON foo (campo1,campo2); > Tem sim, o artigo do Vinícius explica bem, mas vou resumir nos termos da questão e com exemplo: 1. O índice `foo_c1_idx` poderia ser usado de forma ótima para consultas `WHERE campo1 = $1` mas não para `WHERE campo2 = $1` 2. O índice `foo_c2_idx` é o oposto, ótimo para `WHERE campo2 = $1` mas não para `WHERE campo1 = $1` 3. Se você tiver somente `foo_c1_idx` e `foo_c2_idx' e a consulta `WHERE campo1 = $1 AND campo2 = $2`, o PostgreSQL pode escolher por usar apenas um dos índices (daí considera somente campo1 ou campo2 e filtra o outro campo na tabela), o que pode ser suficientemente bom caso seja bem seletivo. 4. Ainda é possível usar ambos para `WHERE campo1 = $1 AND campo2 = $2` com BitmapAnd (veja [1] depois), mas não é tão eficiente quanto se tivesse o `foo_idx`, ou seja, para `WHERE campo1 = $1 AND campo2 = $2`, o `foo_idx` é certamente o ideal (também é ideal para outros casos, como `WHERE campo1 = $1 ORDER BY campo2` ou `GROUP BY campo1, campo2`, etc.). 5. Supomos que você tenha apenas o `foo_idx`, como o índice inicia com `campo1`, é possível usá-lo de forma ótima para `WHERE campo1 = $1` mas não para `WHERE campo2 = $1`. Ter `foo_idx` e `foo_c1_idx` é geralmente redundante (exceção seria se `foo_idx` fosse *muito* maior que `foo_c1_idx`), então é comum ter `foo_c2_idx` e `foo_idx`, mas *NÃO* ter `foo_c1_idx` (pois seu uso ideal já é contemplado pelo `foo_idx`). Sobre o uso de índices compostos o artigo do Vinícius é bem legal, eu queria só complementar com um meu que também comenta sobre o uso de múltiplos índices, que citei em (4), leia em [1]. [1] http://dextra.com.br/como-o-postgresql-usa-multiplos-indices-na-mesma-consulta/ Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral