Serverbelastung bei vielen MySQL-Abfragen?

Hallo zusammen

Ich habe eine Frage:
Ich habe ein PHP-Script, das mir eine .csv-Datei (aus Excel exportiert) in die MySQL-DB importiert. Nun würde ich gerne bei jedem Eintrag, bevor er importiert wird, überprüfen, ob ein ähnlicher Eintrag schon in der DB existiert.

Wie mache ich das nun am besten, ohne den Server allzusehr zu belasten?
Ich nehme an, es ist nicht sonderlich ressourcenschonend, wenn ich für jeden Eintrag eine Select-Abfrage starte… oder doch?

Vielen Dank schon mal…
grüsse
samo

MySQL versteht auch “IF EXISTS” - könntest du damit vlt was anfangen? hält den code auch schön schlank als erst jedes Mal eine Abfrage zu starten :wink:

Danke für deine schnelle Antwort!

Aber ich glaube, ich muss noch ein paar Details nachliefern…
Folgendes möchte ich machen:
Ich habe eine DB, die enthält Namen und eine dazugehörigen ID (nicht gleich DB-ID). Es kann auch mehrere Datensätze mit dem gleichen Namen (und folglich der gleichen ID) geben.
Ich möchte nun, bevor ein neuer Datensatz importiert wird, nachschauen, ob der Name schon existiert, und wenn ja, dessen ID auch für den neuen Datensatz verwenden. Wenn nein, wird eine neue ID zugewiesen.

Das ganze ist relativ einfach. Du setzt die Spalten die einzigartig sein sollen (ID) auf UNIQUE und importierst mit

Hab das ganze hier noch nie getestet, kann sein, dass miro LOAD DATA gesperrt hat, dann könntest du noch den MySQLDumper probieren

Danke für deine Antwort, michi7x7, aber ich glaube du hast mich ein wenig falsch verstanden…
Es sollen ja genau mehrere Datensätze mit gleicher ID existieren können. Und ich möchte, falls die neuen Datensätze den gleichen Namen haben, wie ein bereits existierender, den neuen dieselbe ID zuweisen wie dem alten.

Ich glaube, ich hole mir einfach im Voraus alle Werte, die ich brauche, aus der DB in ein Array und durchsuche nacher dieses… Dann muss ich nicht zig Abfragen starten und habe mein Ziel trotzdem erreicht… :wink:

Danke trotzdem für eure Hilfe :wink:

MySQL kann auch sehr fortgeschrittene Sachen:

CREATE TEMPORARY TABLE new_data LIKE tabelle;
LOAD DATA INFILE '/users/USERNAME/www/datei.csv' INTO TABLE new_data;

SELECT INTO TABLE tabelle CASE WHEN o.id THAN o.id ELSE n.id AS id, o.name, ... FROM tabelle AS o, new_data AS n WHERE o.name = n.name;

Jedenfalls so in etwa… habs jetzt nicht getestet.

ui :smiley:
ok, ich muss zugeben, so fortgeschritten bin ich noch nicht… :wink:
aber das ist eine interessante alternative, werd ich mir merken
Vielen Dank !bunny