Schnelle Methode um zu testen ob Datensatz existiert

Status
Nicht offen für weitere Antworten.

Kartoffel

Mitglied
Hallo zusammen,

ich hab da mal ein Problem...

Ich muss in eine Datenbank mehrere neue Zeilen schreiben, allerdings nur, wenn der Datensatz nicht schon existiert.

Um zu prüfen ob der Datensatz existiert benutze ich zur Zeit diese Query:

Java:
 String query = "SELECT FIRST 1 " + columnName + " FROM " + tableName + " WHERE " + columnName + "=?";

Daraus mach ich ein Preparedstatement und benutze die Query jedesmal wieder für meinen Test, aber mit anderen Parametern.

Funzt auch alles, nur is der Test auf "Vorhandensein" der Teil, der am meisten Zeit benötigt.
Die Zeit gaht drauf, wenn ich das Resultset öffne bzw. wenn ich auf den ersten Datensatz springe:

Java:
 rs = stmt.executeQuery();
 boolean hasNext = rs.next(); //<---- hier

Wenn hasNext true ist, weiß ich dass der Datensatz schon vorhanden ist. Nur dauert mir das zu lange. Hat Jemand einen Tipp, wie ich das schneller hinbekomme?
Es muss immer nur ein Wert in einer Spalte verglichen werden.
 
S

SlaterB

Gast
viellleicht was mit
update table set x = x where ..;
Rückgabewert von executeUpdate() 0 oder >0?
 

sparrow

Top Contributor
Java:
String query = "SELECT COUNT(*) AS anzahl FROM " + tableName + " WHERE " + columnName + "=?";

Wenn anzahl > 0 ist der Datensatz schon da.
Ich bin mir aber bei mySQL nicht sicher ob das wirklich schneller ist als das Suchen nach dem ersten Datensatz.

Suchen muss er allerdings so oder so, schneller gehts mit einem INDEX auf columnName, ansonsten schmeißt er jedesmal einen sequentiellen Scan aller Datensätze an. Das dauert nun mal.
 

Kartoffel

Mitglied
Das mit COUNT() hab ich auch schon versucht, is allerdings langsamer als die Query, die ich im Moment benutze. Ein Index ist auch auf der Spalte.
Ich versuch das mit dem Update noch, vielleicht bringts ja was, wenn nicht hab ich wohl Pech :). Das Ganze ist ja eigentlich auch nicht langsam, dauert ca. 80ms -100ms, nur wenn man mal 50000 Datensätze einliest, dann summiert sich das.

Danke!
 
S

SlaterB

Gast
> dauert ca. 80ms -100ms, nur wenn man mal 50000 Datensätze einliest, dann summiert sich das.

alle auf einmal testen?
 

Kartoffel

Mitglied
@ARadauer: Typ String. Bis jetzt hab ich so 60000 Stück drin.

@SlaterB: Ne das is immer ein Datensatz der da geprüft wird. Wenn ich also 60000 neue Datensätze einlese, dann muss ich auch 60000 mal die Prüfung durchführen.
Und 60000 * 100ms = lang
 
S

SlaterB

Gast
dass du es bisher einzeln prüfst, ist schon klar,
die Frage ist, ob du das ändern kannst, da ist die Begründung bisher etwas dürftig,

blockweise geht natürlich auch, wenn 100 Prüfungen 500ms dauern, dann spart das schon 95%
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
D sql query in methode mit rückgabetyp Datenbankprogrammierung 14
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
C Seitensystem mit seek Methode Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
J Datenbank: Methode wegen doppelten User Datenbankprogrammierung 1
N tableChanged Methode - AbstractTableModel Datenbankprogrammierung 2
W Methode createStatement() Datenbankprogrammierung 14
S Hibernate und Set-Methode Datenbankprogrammierung 16
S Schnellste Methode Datei aus Datenbank herstellen Datenbankprogrammierung 7
A update methode für datenbank Datenbankprogrammierung 2
A Insert Methode Syntaxfehler Datenbankprogrammierung 2
J Methode Datenbankprogrammierung 5
R Effiziente Java-Methode zum finden eines freien PK Datenbankprogrammierung 7
G Effektive Methode zum durchsuchen von SQL-Datenbanken Datenbankprogrammierung 7
A Problem mit der Methode setFieldDelimiter("'"); Datenbankprogrammierung 3
L Methode, die Veränderungen in Datenbank zeigt? Datenbankprogrammierung 4
T Methode getColumnIndex(String columnName) ? Datenbankprogrammierung 6
A Blob in Oracle-DB einfügen (veraltete Methode) Datenbankprogrammierung 3
B Methode .next() - das Rätsel für Experten! URGENT Datenbankprogrammierung 2
G SQL-Query Methode Datenbankprogrammierung 4
R Mongodb testen bzw mocken Datenbankprogrammierung 3
turmaline Oracle Testen DB-Background-Jobs mit JUNit Datenbankprogrammierung 10
D Mittels JUnit Reihe von DAOs testen Datenbankprogrammierung 10
timomeinen [Hibernate] Datenbankverbindung testen Datenbankprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben