Pois é, em minha opinião deveria usar o índice.

Alguém poderia ajudar-nos a entender o que acontece?

Obrigado.
Renato.

>-----Mensagem original-----
>De: Walter Cruz [mailto:[EMAIL PROTECTED]
>Enviada em: sexta-feira, 24 de março de 2006 17:16
>Para: [email protected]
>Assunto: Re: [PostgreSQL-Brasil] RES: RES: RES: Melhor maneira de fazer
>pesquisas ignorando acentos e maíusculas/minúsculas
>
>Então Renato - na verdade, acho que é uma tabela pequena:
>
>SELECT COUNT(*)
>       FROM tab_municipios
>
>RESULTADO: 5564
>
>[]'s
>- Walter
>-----Mensagem original-----
>De: Renato Cramer 
>Enviada em: sexta-feira, 24 de março de 2006 16:56
>Para: '[email protected]'
>Assunto: [PostgreSQL-Brasil] RES: RES: RES: Melhor maneira de fazer
>pesquisas ignorando acentos e maíusculas/minúsculas
>
>Testei aqui e também não usou os índices, mas tinham poucas linhas na
>tabela.
>
>Walter, sua tabela possui muitas linhas?
>
>Pergunto isso porquê se são poucas linhas, o otimizador pode concluir
>(corretamente) que um full scan é mais rápido do que pesquisar 
>os índices.
>
>Se tiver muitas linhas na sua tabela, aí não entendi mesmo...  :)
>
>>-----Mensagem original-----
>>De: Walter Cruz [mailto:[EMAIL PROTECTED]
>>Enviada em: sexta-feira, 24 de março de 2006 16:48
>>Para: [email protected]
>>Assunto: Re: [PostgreSQL-Brasil] RES: RES: Melhor maneira de fazer
>>pesquisas ignorando acentos e maíusculas/minúsculas
>>
>>Bom, eu criei os indíces aqui, pensando nas várias possibilidades
>>(okey, é só um teste mesmo, vamos criar índices a vontade!)
>>
>>CREATE INDEX idx_nomemunic
>>  ON tab_municipios
>>  (nomemunic);
>>
>>CREATE INDEX idx_nomemunic_upper_to_ascii
>>  ON tab_municipios
>>  (upper(to_ascii(nomemunic)));
>>
>>CREATE INDEX idx_nomemuniclower
>>  ON tab_municipios
>>  (lower(nomemunic));
>>
>>CREATE INDEX idx_nomemuniclower_to_ascii
>>  ON tab_municipios
>>  (lower(to_ascii(nomemunic)));
>>
>>CREATE INDEX idx_nomemunicupper
>>  ON tab_municipios
>>  (upper(nomemunic));
>>
>>Agora, as queries :)
>>
>>EXPLAIN SELECT *
>>       FROM tab_municipios
>>       WHERE lower(to_ascii(nomemunic,'LATIN1')) = lower(to_ascii('sÃo
>>PaULo','LATIN1'))
>>
>>RESULTADO:
>>"Seq Scan on tab_municipios  (cost=0.00..198.37 rows=28 width=142)"
>>"  Filter: (lower(to_ascii((nomemunic)::text, 'LATIN1'::name)) = 'sao
>>paulo'::text)"
>>
>>_____
>>
>>agora, com UPPER:
>>
>>EXPLAIN SELECT *
>>       FROM tab_municipios
>>       WHERE upper(to_ascii(nomemunic,'LATIN1')) = upper(to_ascii('sÃo
>>PaULo','LATIN1'))
>>
>>RESULTADO:
>>"Seq Scan on tab_municipios  (cost=0.00..198.37 rows=28 width=142)"
>>"  Filter: (upper(to_ascii((nomemunic)::text, 'LATIN1'::name)) = 'SAO
>>PAULO'::text)"
>>
>>Ele executa, mas não usa os indíces. E agora?
>>
>>[]'s
>>- Walter
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br

Responder a