PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Abfrage viel langsamer mit PreparedStatement im Vergleich zu Statement

Ihre vorbereitete Anweisung wandelt full_address um in text (Postgres eingebauter Texttyp), während Ihre Tabelle anscheinend mit einem citext erstellt wird (Groß-/Kleinschreibung beachten) Texttyp (oder Ihnen fehlt ein Index für full_address::text ). Versuchen Sie vielleicht, einen Index für full_address::text zu erstellen und sehen Sie, ob Ihre vorbereitete Erklärung es abholen wird.

Eine andere Möglichkeit ist die Verwendung eines text Geben Sie für full_address ein Spalte und erstellen Sie dann einen funktionalen Index für lower(full_address) -- die Schmackhaftigkeit dieser Option hängt von Ihren Anforderungen ab.

Ich denke, dass ein Teil des Problems darin besteht, dass JDBC den citext nicht kennt Geben Sie so ein, es sei denn, Sie können JDBC dazu bringen, Ihre Adresse als citext an die Datenbank zu senden Typ, wird er vom Abfrageplaner als text interpretiert , genau wie Ihr setString() Methode tut es wahrscheinlich.

Interessanterweise bin ich vor kurzem auf ein ähnliches Problem gestoßen

Offenlegung:Ich arbeite für EnterpriseDB (EDB)