CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
04.09.2007, 13:04:40
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 4
|
|
MySQL-Server in Endlosschleife
Hallo allerseits,
Ich verzweifle momentan etwas an einer Abfrage, bei der der Server scheinbar in einer Endlosschleife hängen bleibt.
Das zugehörige PHP-Skript bleibt entsprechend im mysql_query() hängen.
Das SQL-Statement sieht so aus:
SELECT COUNT(y2.id) FROM `y_world` AS y1 LEFT JOIN `y_world` AS y2 ON y1.fieldid = y2.fieldid AND y1.dateline = y2.dateline AND y1.id != y2.id
Die Spalten id, fieldid und dateline sind alles Integer.
Das seltsame ist, dass es zeitweise mal funktioniert hat und mal nicht. Das Problem tritt sowohl bei einem Webhoster auf, bei dem ich Kunde bin, als auch bei mir lokal (XAMPPlite 1.5.5). Also vermute ich mal einen Bug bei MySQL.
Nun interessiert mich aber, ob jemand weiss, mit was genau der Server nicht klar kommt.
Gruß,
Darky
|
04.09.2007, 13:09:13
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: MySQL-Server in Endlosschleife
Lass doch bitte mal
Code:
EXPLAIN SELECT COUNT(y2.id) FROM `y_world` AS y1 LEFT JOIN `y_world` AS y2 ON y1.fieldid = y2.fieldid AND y1.dateline = y2.dateline AND y1.id != y2.id
laufen und poste die Ausgabe.
Geändert von defabricator (04.09.2007 um 13:09:27 Uhr)
|
04.09.2007, 13:16:33
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 4
|
|
AW: MySQL-Server in Endlosschleife
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,y1,ALL,,,,,2444,
1,SIMPLE,y2,ALL,,,,,2444,
sorry für die blöde formatierung - ich hoffe du siehst trotzdem durch ;)
|
04.09.2007, 13:46:22
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: MySQL-Server in Endlosschleife
Da fehlt mindestens ein Index, um den MySQL Server zu unterstützen.
Code:
ALTER TABLE y_world ADD INDEX irgendeinName (fieldid,dateline,id)
danach dann nocheinmal EXPLAIN ... ausführen und die Ausgabe bitte posten.
|
04.09.2007, 13:53:34
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 4
|
|
AW: MySQL-Server in Endlosschleife
neues Ergebnis ist das:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,y1,index,,irgendeinName,12,,2444,Using index
1,SIMPLE,y2,ref,irgendeinName,irgendeinName,8,test.y1.fieldid,test.y1. dateline,1,Using index
mit den Indizes läuft die Abfrage jetzt auch wunderbar durch :)
Kannst du mir erklären (bzw. mir was zum Lesen empfehlen), nach welchen Kriterien ich die Indizes in Zukunft anlegen soll und wie sich das auf die Laufzeit von Abfragen auswirkt?
Gruß und danke schonmal,
Darky
|
04.09.2007, 14:05:39
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: MySQL-Server in Endlosschleife
Da kann ich leider nicht richtig mit dienen. Indices sind nicht meine Stärke.
Dass es zum Beispiel auf die Reihenfolge, in der man die Felder bei einem komplexen Schlüssel angibt, ankommen kann, habe ich auch gerade erst gelernt, http://www.selfphp.info/forum/showthread.php?t=17578
Geändert von defabricator (04.09.2007 um 14:16:03 Uhr)
|
04.09.2007, 15:43:38
|
|
AW: MySQL-Server in Endlosschleife
DB Speed Faustregel:
1. Alle Spalten, welche im WHERE Teil vorkommen, sollten mit einem index versehen werden. Das beschleunigt lesezugriffe ungemein!
2. Je mehr Spalten es mit einem Index in der betreffenden Tabelle gibt, desto langsammer sind INSERT, DELETE und UPDATE.
3. Da auch DELETE und UPDATE oft einen WHERE Teil haben, siehe Punkt 1 ;-)
4. Da meist Lesezugriffe überwiegen, lohnt sich oft ein vorsortieren der Daten: "ALTER TABLE `tabelle` ORDER BY `spalte` ASC"
*grob vereinfacht*
Geändert von rambi (04.09.2007 um 15:48:47 Uhr)
|
04.09.2007, 16:25:25
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 4
|
|
AW: MySQL-Server in Endlosschleife
Danke für die Antworten. Ich hab mir auch mal das durchgelesen, was in der MySQL-Doku dazu steht - leider hab ichs nicht ganz verstanden.
Warum die Reihenfolge bei mehrteiligen Indizes eine Rolle spielt hab ich verstanden, aber wann genau ein mehrteiliger Index sinnvoll ist leider nicht. Es wäre sehr nett, wenn du mir das noch sagen kannst :)
Gruß,
Darky
|
05.09.2007, 08:57:31
|
Junior Member
|
|
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
|
|
AW: MySQL-Server in Endlosschleife
Hi,
soweit ich weiß ist ein zusammengesetzter Index dann sinnvoller als zwei einzelne Indizes, wenn hauptsächlich über mehrere Spalten gesucht wird.
Z.B.: Wenn Du in einer Adressdatenbank mit u.a. den Spalten nachname und vorname meistens nur nach dem Nachnamen suchst reicht ein Index über "nachname", wenn für Deine Suche aber vor allem die Kombination aus Nachname und Vorname wichtig ist sollte der Index entsprechend über beide Spalten (in der korrekten Reihenfolge) liegen.
Zusammengesetzte Indizes sind aber auch nicht ganz meine Spezialität, bis jetzt haben mir "einfache" Indizes immer ausgereicht.
HTH,
Andy
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:30:45 Uhr.
|