Die Leistung des Frühlings NamedParameterJdbcTemplate Abfrage sehr langsam
Arbeite ich an einem Projekt, das erfordert, dass JDBC-Aufrufe zu einer Oracle-Datenbank. Ich habe bis UCP-pooling zu arbeiten, mit SpringJDBC. Ich habe eine Recht simple Abfrage, die ich ausführen, wie die folgenden...
SELECT * FROM TABLE WHERE ID IN (:ids)
mein java-code, um diese Abfrage sieht wie folgt aus...
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(datasource);
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("ids", Arrays.asList(idArray));
List<Result> results = template.query("SELECT * FROM TABLE WHERE ID IN (:ids)",
paramMap, new ResultRowMapper());
Dies alles führt in Ordnung, solange es nur 1 id in das array. Wenn ich eine 2. ID die Abfrage dauert fast 5 Minuten zu laufen. Wenn ich die genaue Abfrage und führen Sie Sie im SQLDeveloper, dauert es .093 Sekunden.
Muss etwas gehen schrecklich falsch mit meinem code oder Konfiguration... Hat jemand irgendwelche Ideen?
EDIT:
Ich zog aus dem Gebrauch der Feder NamedParameterJdbcTemplate und ging mit nur gerade Jdbc und alles scheint führen Sie große. Was ist es, das NamedParameterJdbcTemplate ist anders machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, fand ich den Unterschied zwischen meinem gerade jdbc-Lösung und mein spring-jdbc-Lösung in dieser situation... Es scheint, dass, wie @Annjawn unten erklärt, es ist eine bind-variable Ausgabe nicht eine spring-jdbc-Problem. Meine spring-jdbc-Problem wurde beim binden einer Variablen zu einem index (die nicht existieren), damit ein table scan...
Meinem gerade JDBC-Lösung landet nur tun, eine string-Ersetzung und der Ausführung, da ist also kein table scan...
Den folgenden link wird der Unterschied erklärt.
http://bytes.com/topic/oracle/answers/65559-jdbc-oracle-beware-bind-variables
template.queryForList()
statttemplate.query()
.