2016-05-16 23:19 GMT+12:00 Rafael Fialho <[email protected]>:
> Você pode desacentuar e minimizar o contéudo passado como parâmetro e
>>> manter o LIKE.
>>>
>>> `WHERE lower(functionDesacentua(col)) LIKE
>>> lower(functionDesacentua(texto)) || '%'`
>>>
>>>
>>
>> O meu problema aqui é que o LIKE é case-sensitive... ou seja.. estou
>> pesquisando por RYAN SHOWER mas não sei se essas palavras estão em
>> maiúscula ou minúscula... portanto.. o LIKE me retorna 0 rows.
>>
>
> Bom dia!
> Pois é justamente pra isso que os dois "lower()" são utilizados, assim
> estarás convertendo o texto para lower case e o campo a ser pesquisado
> também, eliminando o trabalho do ilike, podendo utilizar like, pois a
> pesquisa funcionará mesmo sendo case sensitive.
> Pra isso, o índice também precisa ser criado com lower(col), ou qualquer
> outra transformação non-volatile que o campo sofra.
>
>
Certo. Obrigado, Rafael.
*Nova query: (O clientid está diferente apenas por motivos de WARM data)*
> SELECT DISTINCT title
> FROM public.ja_jobs WHERE lower(title) LIKE lower('RYAN
> SHOWER')
> AND clientid = 31239
> AND time_job > 1457826264
> order BY title
> limit 10;
*Index:*
> CREATE INDEX CONCURRENTLY ON public.ja_jobs (clientid, lower(title)
> varchar_pattern_ops, time_job);
Desse modo está funcionando perfeitamente bem. E a query, de quase 3
segundos passou à ser executada em 300ms.
Entretanto, tive que deixar o DISTINCT. Mas isto não afetou a performance.
Obrigado.
Lucas
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral