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