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
