PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

consulta muito mais lenta com prepareStatement em comparação com a instrução


Sua instrução preparada converte full_address em text (tipo de texto interno do Postgres), enquanto parece que sua tabela foi criada com um citext tipo de texto (não diferencia maiúsculas de minúsculas) (ou você não tem um índice em full_address::text ). Talvez tente criar um índice em full_address::text e veja se a sua declaração preparada vai pegá-la.

Outra opção é usar um text digite para o full_address coluna e, em seguida, crie um índice funcional em lower(full_address) -- a palatabilidade dessa opção depende de quais são seus requisitos.

Acho que parte do problema é que o JDBC não sabe sobre o citext digite so a menos que você consiga que o JDBC envie seu endereço para o banco de dados como um citext tipo, ele será interpretado pelo planejador de consulta como text , assim como seu setString() método provavelmente faz.

Curiosamente, eu deparei com um problema semelhante recentemente

Divulgação:trabalho para o EnterpriseDB (EDB)