phpbar.de logo

Mailinglisten-Archive

[php] PHP und mySQL langsam?

[php] PHP und mySQL langsam?

Ringo Großer swek at gmx.net
Mon Jul 17 11:35:19 CEST 2006


Hallo Thomas,

Thomas Winter wrote:
> Ich benutze die mySQL-class (ich glaube phplib).

Benutze ich auch. Kann damit keine Probleme bestätigen.

> Mit jedem query wird auch ein $this->connect() gemacht. Daher habe ich
> mysql.allow_persistent auch schon auf ON gestellt.

Wird bei einigen Providern gar nicht mehr angeboten und wohl
auch nicht mehr empfohlen. Begründen kann ich es grad nicht
konkret, aber es hatte wohl etwas damit zu tun, dass die Persistenz
auf eine gewisse Anzahl von Queries limitiert war und wenn gerade
mitten in einer Verbindung diese Anzahl erreicht war, gabs quasi
einen Reconnect zur DB und dabei entstanden die Probleme.

> Ich lese die Textdatei mit fopen($datei,'r'), dann ein while, ein
> explode mit \n, dann ein explode für die Felder der Zeile mit ',' und
> ich erhalte ein Array mit 5 Elementen.

Klingt nach einer CSV Formatierung dieser Daten. Hast du dir
schon die Funktion fgetcsv() angesehen? Damit kannst du schön
zeilenweise deine Datei einlesen.

> Dann prüfe ich auf doppelte Datensätze mit einem query. Da ich bereits
> mehrmals abgebrochen haben muss ich erst mal 50000 Datensätze nur
> prüfen und nicht schreiben.

Prüfst du zeileweise die Datensätze aus deiner Datei gegen die bisherigen
Einträge in der DB? Oder prüfst du gleichzeitig alle aus der Datei geholten
Zeilen gegen die DB ab? Wieviele Zeilen sind das in einer Query? Wie
lang ist die Query?

> Was ist da denn so langsam, ist explode so kompliziert oder liegt es
> dem mySQL SELECT. Die Felder sind nicht indiziert, aber selbst als es
> nur einige Hundert Datensätze in der Datenbank waren fand ich es
> nicht signifikant schneller.

INDICES sind unbedingt entscheidend. Setze über Spalten, die in JOINS
oder WHERE Klauseln häufig verwendet werden unbedingt einen INDEX.
Das beschleunigt MySQL ungemein.

Ansonsten bleibt dir nur ein Profiling deines Scriptes. Setze an vermuteten
zeitkritischen Stellen mit dem Debugger in deiner IDE Marken zum Messen
der Laufzeiten. Oder schreibe dir ein kleines Script selbst, das so etwas 
kann.
Dann wirst du einschränken können, wo es in deinem Script wirklich klemmt.

regards, Ringo 


php::bar PHP Wiki   -   Listenarchive