Diego,
Faça o seguinte:
1) crie uma função (em SQL ou PL/pgSQL) que extraia o prefixo do CNPJ
e converta-o para número inteiro
2) crie um índice baseado na função criada, armazenando apenas o
prefixo do CNPJ em formato numérico
3) crie um índice parcial para filtrar somente pessoas jurídicas
4) faça as consultas dessa forma:
SELECT *
FROM empresas
WHERE tipo_pessoa = 'J'
AND funcao(cnpj) = funcao('000000000/001-91');
5) talvez essa query possa ser otimizada caso você execute previamente
o lado direito da expressão no filtro por CNPJ
6) atualize as estatísticas com o ANALYZE
7) execute a consulta e verifique se os índices estão sendo usados -
comando EXPLAIN
--
Rodrigo Hjort
http://icewall.org/~hjort
2006/9/15, Diego Altheman dos Santos <[EMAIL PROTECTED]>:
> Pessoal, Bom dia
>
> Gostaria de saber se existe alguma maneira de otimizar pesquisas por substr.
> tenho seguinte problema.
>
> Preciso procurar por CNPJS rais:
> exemplo : 000000000/001-91,
> Eu considerarias todos os cnpjs na base que contenham os mesmos digitos
> antes da barra
>
> Entaum, c eu fizesse uma somatoria teria q levar em conta os cnpjs:
> 00000000/002-72 00000000/003-53 ,etc...
>
> Com substring eu faco , mas gostaria de saber se existe um meio de
> optimizar...
> OBS: Na mesma tabela eu tenho cpfs tbm o q acaba dificultando um poko..
>
> Se alguem tiver alguma sugestao, agradeco
>
> vlw
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios