On Fri, Mar 6, 2015 at 11:25 AM, Luiz Carlos L. Nogueira Jr. <
[email protected]> wrote:

> ...
>
>   CREATE INDEX idx_tb_processo_nr_processo_ubd
>   ON core.tb_processo
>   USING btree
>   (lower(to_ascii(nr_processo::text)) COLLATE pg_catalog."default");
>
> ...
>
> explain analyze
> select * from tb_processo
> WHERE  lower ( to_ascii ( nr_processo ) ) LIKE
> '0001949-27.2015.8.17.8201%'
>
> Seq Scan on tb_processo  (cost=0.00..188212.14 rows=26803 width=240)
> (actual time=411.008..562.486 rows=1 loops=1)
>   Filter: (lower(to_ascii((nr_processo)::text)) ~~
> '0001949-27.2015.8.17.8201%'::text)
>   Rows Removed by Filter: 352791
> Total runtime: 562.504 ms
>
>
> Por que a 1a consulta usa o índice idx_tb_processo_nr_processo e a 2a não
> usa o índice idx_tb_processo_nr_processo_ubd
>

É necessário atualizar as estatísticas da tabela ao criar um índice com
expressão, você pode forçar isso executando:

    ANALYZE tb_processo;

Você está usando COLLATE "C"? Pois se não o LIKE só será indexado vai
B-tree se usar text_pattern_ops ou varchar_pattern_ops.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a