PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

requête beaucoup plus lente avec l'instruction préparée par rapport à l'instruction

Votre instruction préparée transfère full_address en text (type de texte intégré à Postgres), alors qu'il semble que votre table soit créée avec un citext (insensible à la casse) type de texte (ou, il vous manque un index sur full_address::text ). Essayez peut-être de créer un index sur full_address::text et voyez si votre relevé préparé le reprendra.

Une autre option consiste à utiliser un text tapez pour l'full_address colonne, puis créez un index fonctionnel sur lower(full_address) -- l'appétence de cette option dépend de vos besoins.

Je pense qu'une partie du problème est que JDBC ne connaît pas le citext tapez so sauf si vous pouvez demander à JDBC d'envoyer votre adresse à la base de données en tant que citext type, il va être interprété par le planificateur de requêtes comme text , tout comme votre setString() méthode le fait probablement.

Fait intéressant, j'ai j'ai récemment rencontré un problème similaire

Divulgation :je travaille pour EnterpriseDB (EDB)