Fatal error: Maximum execution time ...

liquidbeats

Erfahrenes Mitglied
Hallöchen

Ich habe da ein Problem, und zwar geht es dabei um eine Datenbank abfrage.
Ich habe da eine eine Abfrage die den Inhalt einer Datenbank abfragen soll, nun stürzt er aber immer ab, was ich auch verstehen kann.

Laut PHP my admin abfrage
Code:
 SELECT COUNT( id )  AS anzahl
FROM kategorie
befinden sich 5479 Datensätze in dieser Kategorie die auch abgefragt werden.
Bei C# gibt es threads, die sowas im Background laufen lassen, ist sowas auch mit PHP möglich?
mir ist gerade beim Schreiben eingefallen das ich es mit einer Blätterfunktion lösen könnte, aber auch nur in der Darstellung der Kategorien und im Adminnistrationsbereich, bzgl des Suchformulares weis ich so nicht weiter, da jede Unterkategorie auswählbar sein soll :rolleyes:

Habt Ihr da evtl. einen Denkanstoß für mich?
Schaut euch mal die Suchfunktion hier von dem vBulletin an, genauso sieht es bei mir auch aus, aber eben nur viel mehr datensätze.


Gruß
 
liquidbeats hat gesagt.:
(...) Schaut euch mal die Suchfunktion hier von dem vBulletin an, genauso sieht es bei mir auch aus, aber eben nur viel mehr datensätze.
Also ich bezweifle ganz stark, das du mit 5479 Tupel mehr hast, als hier im Forum...
Allein das PHP-Forum hier hat 21.357 Themen mit 131.293 Beiträgen...

Was für Feldtypen hast du in der Tabelle?
Wie sieht das Query aus?
Hat die Tabelle einen Index? Wo?

Schlechte Performance liegt meistens am 'schlechten' Code.
Hardwareunterschiede treten erst bei größeren Zahlen auf.
 
Hier in der suchfunktion werde nicht die Themen und Beiträge gelistet.
dort sind nur die Kategorien, das forum hier hat nicht soviele Kategorien.
Ich habe 5200 und ein paar zerquetschte, diese führen zur Problematik beim Laden, da jede einzelne Kategorie geladen wird.
Finde ich merkwürdig das bei dir im suchformular die Themen gelistet sind :rolleyes: bei mir jedenfals sind sie nicht vorhanden, und dies ist auch allgemein bei vB nicht der fall.

Desweiteren werden hie rim Forum die themen und Beiträge nicht alle aufeinmal geladen, da es die Blääterfunktion gibt.


Es geht um das Laden der Kategorien, nicht von Themen, Beiträge oder sonstiges, das ist alles kein Problem.

Beim öffnen des Suchformulares werden 5200 Kategorien eingeladen die dann zur auswahl stehen sollen, in denen man suchen kann.
Auch die option unterkategorie durchsuchen steht zurverfügung.
Die Suche selbst Funktioniert, da diese wieder über eine Blätterfunktion Verfügt.

Nur die Darstellung der Suchoption bereitet Probleme.

Anbei noch ein Bild damit man mir glaubt das es um die 5000 Inhalte sind, ein paar sind wieder verschwunden, ca 200, bin ja noch am arbeiten und füllen der Datenbank.
Und ein Bild der Struktur.

Gruß
 

Anhänge

  • sql.gif
    sql.gif
    5,2 KB · Aufrufe: 34
  • struktur.gif
    struktur.gif
    37,4 KB · Aufrufe: 34
Ich bin nur gefrusstet weil es jetzt daran hapert :rolleyes:
Wusste selbst nicht das es soviele Kategorien werden, nur dort ist jetzt eine Schwachstelle.

Das ist die Abfrage
PHP:
 $sub_kat = $DB -> query("SELECT * FROM kategorie WHERE visible=1 AND sub=".$this_id." ORDER BY title ASC");
 		if(@mysql_num_rows($sub_kat) >= 1)
 		{
 		    while(list($id,$title,$besch,$goto,$visible,$usergrup,$typ,$position,$sub) = mysql_fetch_row($sub_kat))
 			{
 		    	if($check==0){	eval("\$source_code .= \"".template('Kategorie/a_kat_title')."\";");	}
 		    	else{	    	eval("\$source_code .= \"".template('Kategorie/a_kat_link')."\";");	}
 				
 		    	$this_sub_kat = $DB -> query("SELECT * FROM kategorie WHERE visible=1 AND sub=".$this_id." ORDER BY title ASC");
 				if(@mysql_num_rows($this_sub_kat) >= 1)
 				{
 					unset($a_kat_link);
 		    		$a_kat_link .= read_sub_kategories_html($level,$id,$start,1);
 				}
 		    	$source_code = str_replace("{a_kat_link}",$a_kat_link,$source_code);
 				
 			}
 		}

Bzgl. des Indexes, wie frage ich den ab?

Gruß
 
Bzgl. der Indexinfos, habe das in phpmyadmin gefunden

Daten 356.160 Bytes
Index 47.104 Bytes
Überhang 13.828 Bytes
Effektiv 389.436 Bytes
Insgesamt 403.264 Bytes


Gruß
 
Also grundsätzlich ist SELECT * bescheiden, verwende lieber die Spaltennamen, die du auch benötigst.

While-list ist auch nicht das Schnellste, was PHP hergibt, versuchs mal eher mit for.

Wenn du nicht weißt, wo der Index steht, dann hast wahrscheinlich auch keinen.
Kannst in der mysql-Dokumentation nachlesen.

Vorausgesetzt du hast einen Primärschlüssel auf der Spalte id machst das so:
ALTER TABLE `kategorie` ADD INDEX ( `title` )
 
In der Übersicht der Tabelle in phpMyAdmin gibts einen Bereich namens Indizes.
Sieht ungefähr so aus, wie sieht der bei dir aus?

Indizes:
Name Typ Kardinalität Aktion Feld
PRIMARY PRIMARY 14 Bearbeiten Löschen id
ort INDEX keine Bearbeiten Löschen ort
 
Der sieht wie folgt aus
PRIMARY PRIMARY 5248 id

Also das ich es auf die Spalten berenzen werde, welche auch benötigt werden hatte ich eh vor, würde mir sonst der Speicher zu stark belasten, Ich hatte das vorerst nur so da ich nicht lusste hatte immer am query rumzuwerkeln, das ist ja alles noch so im aufbau.
Ich habs aber mal entfernt, bringt nur einen minimalen Performance schub.
Ist aber besser als nichts :)


Jetzt sieht der Indizes wie folgt aus
PRIMARY PRIMARY 5248 id
title INDEX 5248 title

Gruß
 
Zuletzt bearbeitet:
Zurück