Em 27 de abril de 2011 17:28, Prof. Cleverson
<[email protected]> escreveu:
> Desculpe minha ignorância sobre os índices mas, tenho algumas dúvidas:
>
> a) Quando crio chaves primárias e estrangeiras não preciso criar índices
> prá elas. Certo?

Chaves primárias criam índices únicos implícitos. Para chaves
estrangeiras você deve criar manualmente conforme o necessário.
NOTA: chaves estrangeiras são como check constraints que validam se o
valor aplicado existe na tabela pai. Ao menos que você faça pesquisas
sobre os campos da FK nas tabelas filhas não é necessário a criação de
índices.

> b) Utilizo muito a busca pelo nome do cliente desta forma "where nome
> ilike 'juc%'". Para melhorar o desempenho, um índice neste caso ajudaria?

Sim, para este tipo de consulta a criação de um índice onde a
_primeira_ coluna indexada seja o campo *nome* irá ajudar. Entretanto
o índice não irá resolver em nada para consulas com LIKE '%juc%' ou
LIKE '%juc'.

> c) No caso acima o índice seria criado assim "CREATE INDEX cliente_nome ON 
> cliente (nome)" ?

Exato.

> d) Quando uso expressões nos índices?
>

Não sei se entendi corretamente, mas acho que você se refere a usar
predicados. Em algumas situações quando você deseja *particionar*
índices para otimizar determinadas consultas como por exemplo, no caso
acima, caso a expressão LIKE 'juc%' seja frequentemente usada, você
poderá indexar esta condição no índice da seguinte forma:

CREATE INDEX cliente_nome ON cliente (nome) WHERE ( nome like 'juc%' )

Assim, em tabelas contendo colunas do tipo DATE você poderia criar um
indice por ano ou por mês, por exemplo (eu já fiz isso uma vez e
recomendo, mesmo que o trabalho de manutenção seja maior).

-- 
TIAGO J. ADAMI
http://www.adamiworks.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a