Hi Allemaal.

Zit met een porbleem dat mijn mysql database traag lijkt te reageren.

Het is lastig te reproduceren omdat het niet constant is.

Ik denk nu te hebben achterhaald wanneer de traagheid optreed;

De database betreft een forum, wanneer iemand bijvoorbeeld een reactie heeft geplaatst in een topic en daarna de forum-pagina opvraagt duurt het erg lang voordat de pagina is geladen.

Heeft iemand tips hoe of wat ik kan testen?

Alvast dank..

Daniƫl
Helaas.

De code:
<? if(empty($_GET['pagina']))
	header("location: ../../content.php?pagina=forum/forum");

$select = "SELECT * FROM forum_categorieen ORDER BY naam";
$query = mysql_query($select)or die(mysql_error());

if(mysql_num_rows($query) == 0)
{
	echo "<div class=\"titel\">Fout</div>";
	echo "<div class=\"bericht\">Er zijn nog geen forumcategorieen aangemaakt...</div>";
}
else
{
	while($list = mysql_fetch_object($query)) 
	{
		echo "<div class=\"titel\">";
		echo "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"98%\">";				
		echo "<tr>";
		echo "<td width=\"5%\"></td>";
		echo "<td width=\"45%\"><b>".htmlspecialchars($list->naam)."</b></td>";
		echo "<td width=\"10%\"><b>Topics</b></td>";
		echo "<td width=\"10%\"><b>Reacties</b></td>";
		echo "<td width=\"30%\"><b>Laatste post</b></td>";
		echo "</tr>";	
		echo "</table>";
		echo "</div>";
		echo "<div class=\"bericht\">";
		echo "<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\" width=\"98%\">";				
	
		$select2 = "SELECT * FROM forum_subcategorieen WHERE categorieid = '".$list->id."' ORDER BY naam";
		$query2 = mysql_query($select2)or die(mysql_error());

		if(mysql_num_rows($query2) == 0)
		{	
			echo "<tr>";
			echo "<td colspan=\"5\">Geen subcategorieƫn aanwezig...</td>";
			echo "</tr>";
		}
		else
		{
			while($list2 = mysql_fetch_object($query2))			
			{
				$select3 = "SELECT * FROM forum_onderwerpen WHERE forum = '".$list2->id."'";
				$query3 = mysql_query($select3)or die(mysql_error());

				$select4 = "SELECT * FROM forum_onderwerpen WHERE forum = '".$list2->id."' ORDER BY id DESC LIMIT 0,1";
				$query4 = mysql_query($select4)or die(mysql_error());
				$list4 = mysql_fetch_object($query4);

				$select5 = "SELECT forum_reacties.datum AS datum, forum_reacties.auteur AS auteur, forum_reacties.naam_anoniem AS naam_anoniem 
								FROM forum_reacties JOIN forum_onderwerpen ON forum_reacties.topicid = forum_onderwerpen.id 
								WHERE forum_onderwerpen.forum = '".$list2->id."' ORDER BY forum_reacties.id DESC LIMIT 0,1";
				$query5 = mysql_query($select5)or die(mysql_error());
				$list5 = mysql_fetch_object($query5);

				if(mysql_num_rows($query4) == 0 && mysql_num_rows($query5) == 0)
					$laatste = "Geen";
				elseif($list4->datum > $list5->datum)
				{
					$select6 = "SELECT * FROM leden_gegevens WHERE id = '".$list4->auteur."'";
					$query6 = mysql_query($select6)or die(mysql_error());
					$list6 = mysql_fetch_object($query6);
					
					$door = $list6->gebruikersnaam;	
					$door = strip_tags($door);
					$door = strtolower($door);
					$door = ucwords($door);

					if ($list6->status == "Beheerder") 
						$gebruikersnaam = "$door";
					elseif ($list6->status == "SuperModerator") 
						$gebruikersnaam = "$door";
					elseif ($list6->status == "Moderator") 
						$gebruikersnaam = "$door";
					elseif ($list6->status == "Verbannen") 
						$gebruikersnaam = "$door";
					else
						$gebruikersnaam = $door;

					$laatste = "Door <a href=\"content.php?pagina=leden/profiel&amp;id=".$list6->id."\">".$gebruikersnaam."</a><br />@ ".date("d-m-Y H:i:s", strtotime($list4->datum))."";
				}
				else
				{
					if($list5->auteur != 99999999){
						$select7 = "SELECT * FROM leden_gegevens WHERE id = '".$list5->auteur."'";
						$query7 = mysql_query($select7)or die(mysql_error());
						$list7 = mysql_fetch_object($query7);
							
						$door = $list7->gebruikersnaam;	
						$door = strip_tags($door);
						$door = strtolower($door);
						$door = ucwords($door);
						
						if ($list7->status == "Beheerder") 
						$gebruikersnaam = "$door";
						elseif ($list7->status == "SuperModerator") 
							$gebruikersnaam = "$door";
						elseif ($list7->status == "Moderator") 
							$gebruikersnaam = "$door";
						elseif ($list7->status == "Verbannen") 
							$gebruikersnaam = "$door";
						else
							$gebruikersnaam = $door;
					} else {
						$gebruikersnaam = $list5->naam_anoniem;
					}

					$laatste = "Door <a href=\"content.php?pagina=leden/profiel&amp;id=".$list7->id."\">".$gebruikersnaam."</a><br />@ ".date("d-m-Y H:i:s", strtotime($list5->datum))."";
				}

				$select8 = mysql_query("SELECT COUNT(*) FROM forum_reacties,forum_onderwerpen WHERE forum_onderwerpen.forum = '".$list2->id."' AND forum_reacties.topicid = forum_onderwerpen.id")or die(mysql_error()); 
				$reacties = mysql_result($select8, 0); 

				echo "<tr onclick=\"window.location.href='content.php?pagina=forum/bekijk&amp;id=".$list2->id."'\">";
				echo "<td width=\"5%\"><img src=\"afbeeldingen/forum.gif\" alt=\"Forum\"/></td>";
				echo "<td width=\"45%\"><a href=\"content.php?pagina=forum/bekijk&amp;id=".$list2->id."\"><b>".htmlspecialchars($list2->naam)."</b></a><br />".htmlspecialchars($list2->omschrijving)."</td>";
				echo "<td width=\"10%\">".mysql_num_rows($query3)."</td>";
				echo "<td width=\"10%\">".$reacties."</td>";
				echo "<td width=\"30%\">".$laatste."</td>";
				echo "</tr>";
			}
		}
		
		echo "</table></div>";
	}
}
?>
Ik denk dat het hier vrij duidelijk is wat het probleem is. Kijk maar eens hoeveel queries je uitvoert en dan heb je ze ook nog eens staan binnen een dubbel geneste loop.

Wellicht handig om te bedenken hoe je door eenvoudiger met minder queries op kan lossen ;)

Reageren