2012-12-31 11 views
8

Wäre es ein Unterschied in der Leistung, wenn ich Index verwenden, um Daten vs Spalte Name zu erhalten, und ich spreche über diese Operation millionen Mal am Tag auf dem Server.Leistungsvergleich der Ergebnismenge Extrahieren von Daten mit Index vs Spaltenname

rs.getString(1) vs rs.getString("columnname");

EDIT: JDBC Version Oracle JDBC-Treiber 10.2.0.4.0

+0

Wäre es von der genauen Version des JDBC-Treibers abhängig? Sie müssen wahrscheinlich Ihren eigenen Benchmark erstellen. – maerics

+3

Ich denke, nach Spalte Name wird wenig (vernachlässigbar) Overhead der Berechnung Index, interessante Frage haben. Lassen Sie uns sehen, was Experten kommen. – kosa

+1

Ich versuche mir einen Datenbanktreiber vorzustellen, bei dem die Kosten für das Nachschlagen eines Spaltenindexes nach Namen oder umgekehrt fast die Kosten für das Abrufen der Daten aus der Datenbank übersteigen. Wäre es, weil sie die Datenbank unglaublich gut oder den Treiber unglaublich schlecht entworfen haben? – ruakh

Antwort

10

Die rs.getString(n); etwas schneller durchführen wird, weil es direkt aus einer Sammlung abzurufen, anstatt die Suche.

Hunderte von zukünftigen Lesern Ihres Codes werden die rs.getString("columnname"); zu schätzen wissen, anstatt die SQL nachschlagen zu müssen, um zu sehen, was der Index n betrifft.

4

Es ist nicht wirklich wichtig. Der Treffer in der Datenbank wird viele Male langsamer sein als der Zugriff auf die Spaltenwerte.

rs.getString(n) wird vernachlässigbar schneller. Es hängt jedoch von der Treiberimplementierung und der Anzahl der Spalten im Ergebnis ab. Die meisten Implementierungen verwenden wahrscheinlich HashMap, um Spaltennamen einem Index zuzuordnen, aber nicht unbedingt. Außerdem können einige Treiber die HashMap träge erstellen, was bedeutet, dass die erste Zeile nach dem Spaltennamen am langsamsten ist. JTDS führt beispielsweise eine lineare Suche nach Spalten durch, die noch nicht in der HashMap enthalten sind.

EDIT: kleinere Bearbeitungen und neu angeordnet. Keine inhaltlichen Änderungen