2015-09-02 13:31 GMT-03:00 Renan Fuentes <[email protected]>:

> Hoje em Produção eu tenho este index:
>
>   CREATE INDEX idx_nome_match
>   ON cliente
>   USING btree
>   (nome::text COLLATE pg_catalog."default" varchar_pattern_ops);
>
>
Além disso, você pode querer:

CREATE INDEX ON cliente (simples(nome) varchar_pattern_ops);

Daí podes fazer busca exata:

EXPLAIN ANALYZE SELECT  nome from cliente where simples(nome) =
simples('JOSE DA SILVA NASCIMENTO');

Ou pelo prefixo:

EXPLAIN ANALYZE SELECT  nome from cliente where simples(nome) LIKE
simples('JOSE DA SILVA NASCIMENTO%');


>
>   Funciona, só que querendo melhorar a performance, por isso, estou
> estudando "Full Search Text",
>


Pra busca exata com o operador =, uma B-tree vai atender muito bem. Pode
nos mostrar os planos das consultas acima?


pois a minha base é grande (190 milhões de rows), e está lenta a pesquisa .
> E pelo testes que fiz até o momento realmente FTS é mais rápido, porém a
> minha dificuldade é a pesquisa exata e também a pesquisa variando, por
> exemplo: pesquisando 'JOSE MARIA DA SILVA', com o FTS retornar, as 'MARIA
> JOSE DA SILVA', etc. O que precisaria é a famosa 'JOSE MARIA DA SILVA%'.
>

Você pode indexar LIKE com B-tree caso o coringa não esteja no começo. Caso
queira usar o LIKE com coringa no começo, então veja a extensão pg_trgm [1].

[1] http://www.postgresql.org/docs/current/static/pgtrgm.html

Atenciosamente,
-- 
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a