Problem mit CSV in Datenbank zu schreiben

Hallo!

Danke für den Hinweis. Das wusste ich nicht. Hilft vieleicht etwas :)
Mittlerweile habe ich heraus gefunden, dass es ein Zeitproblem ist.
Ich habe mal es mal deaktiviert, dass der PHP Server nach drei Minuten abbricht und herausgefunden, dass das Update von 1800 Datensätzen fast elf Minuten dauert. Dann ist er fertig und es wurde alles aktualisiert.

Aber das kann ja nciht sein, dass es so lange dauert Oo
 
Hmm, das ist wirklich sehr lange. Kann eigentlich nicht sein. Kannst du mal

Code:
DESCRIBE products;
SELECT COUNT(*) FROM products;

im phpMyAdmin machen und das Ergebnis hier posten?
 
Hm, hat beim ersten Versuch nicht geklappt... aber der gibt ja einfach die Tabelle mit allen feldern zurück. Das sind zwei Seiten... 47 Zeilen/Felder
 
Ok, dann anders. Weißt du was ein Index ist? Kannst du sagen, ob auf der Spalte "products_model2" ein Index (PRIMARY KEY, INDEX, UNIQUE, oder ähnliches) liegt?

Wenn da keiner drauf ist, würde ich folgendes vorschlagen:

1. Mach ein Backup (Dump) der Datenbank
2. Vergewissere dich, ob in der Spalte products_model2 das NULL-Flag auf NO steht oder überall Werte drin sind (z.B. über SELECT * FROM products WHERE products_model2 IS NULL)
3. Lege einen Index auf die Spalte products_model2 z.B. INDEX oder wenn die Werte in der Spalte sowieso nur einmal vorkommen dürfen dann besser noch UNIQUE:

Code:
CREATE UNIQUE INDEX `products_model2_index` ON products (products_model2);

Wenn du kein Unique-Index verwenden kannst, weil dort Werte doppelt drin vorkommen können, musst du das UNIQUE im Query weglassen.

4. Führe noch mal das Script mit dem UPDATE-Statement aus der CSV durch.
 
Vielen Dank! Das hat es gebracht! Abfrage Dauer: 0,3 Sekunden :D

Ich musste das UNIQUE weg lassen.

Noch ne Frage:

Da ich auch nach EANs suchen könnte, ist es ja bestimmt hilfreich, auch dem Feld: products_ean nen index zu geben.
Sind mehrere möglich?

Und dann müsste ich noch eine zweite Tabelle einbeziehen um mir ne Hersteller ID raus zu suchen.

Wenn ich dieses Statement habe:

Code:
"UPDATE products SET ek_preis = :ek_preis 
              WHERE Products_model2 = :key AND manufacturers_id = 
              (SELECT m.manufacturers_id FROM manufacturers m WHERE m.manufacturers_name = 'einName')"

Muss ich dann noch einen Index in der manufacturers Tabelle setzen?

Aber bis hierhin schonmal vielen dank!
 
Also grundsätzlich kommt es darauf an, wieviele Datensätze in der Tabelle sind, auf die das Query abgesetzt wird. Wenn in der Hersteller-Tabelle nur 10 Einträge sind, wird ein Index da kaum was beschleunigen können.

Indizes legt man auf Spalten, die häufig in Queries als Such-Kondition herangezogen werden. Also wenn eine Spalte in WHERE verwendet wird und in der Tabelle überdurchschnittlich viele Datensätze drin sind, könnte es Sinn machen, einen Index drauf zu legen.

Ich würde an dieser Stelle vorschlagen, das Kapitel über EXPLAIN in der MySQL-Doku zu lesen.
 
Zurück