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

Responder a