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