PHP Wie viel Performance kosten SQL-Abfragen?

furryhamster

Lieutenant
Dabei seit
Okt. 2008
Beiträge
1.022
Hi,

hab ein Formular. Bisher habe ich versucht zu vermeiden viele SQL-Abfragen zu implementieren, sofern es sich vermeiden lässt.
Aufgrund der komplexen Struktur wird der Quellcode dadurch sehr unleserlich bzw. kompliziert.

Meine Frage:
Wenn ich viele SQL-Abfragen habe, beeinflusst dies stark die Ladezeit der Seite?
 

Skully

Lieutenant
Dabei seit
Jan. 2002
Beiträge
561
Mit PHP habe ich zwar nicht so die Erfahrung aber SQL-Anfragen können etwas Performance kosten. Z.B. dann wenn der SQL-Server relativ langsam ist.
Generell sollte es aber keine Probleme geben wenn es nur ein paar Anfragen sind.

Zur Code-Übersicht kannst du ja versuchen den SQL-Kram in eine Klasse/Modul/Datei auszulagern und so eine bessere Trennung zu haben.

Evtl. so etwas wie sql = new SQL-Klasse();
b = sql.getBenutzerInfo(benutzerID)

mache etwas mit b
dann sql.getUserPosts(b.id) usw.
 

J@ck

Ensign
Dabei seit
Okt. 2009
Beiträge
184
Kommt darauf an wie du deine Abfragen formulierst :)
Hast du einen Codeschnippsel da?
Viele selects per join kombinieren,
bei selects einzelne tabellenspalten abrufen und nicht einfach select * from
dann kommts natürlich auch auf die Syntax an ob du nun ' oder " verwendest, print oder echo usw usw.

Gibt ne Menge Faktoren, auch welche DB Engine du verwendest, wie deine my.cnf ausschaut,
Apacheconfigs und Hardwareressourcen usw.
 
Zuletzt bearbeitet:

furryhamster

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
1.022
schnell genug sollte der sql-server grundsätzlich sein. aufgrund einer alten php4 version ist objektorientierung leider nicht möglich (oder halt nur sehr eingeschränkt).

folgende sql-abfrage müsste ich mehrmals machen:

PHP:
	$sql="SELECT name1, ..............., name21 FROM tabelle 1, tabelle2 WHERE 7 bedingungen + join;
$rid=ifx_query($sql,$conn_id);	
			
			$i = 1;
			$zaehler = 0;
			while($row=ifx_fetch_row($rid)){
				
				if (trim($row['namex']) == $_GET['namex'])
				{
					$variable.= "
					<tr>
					<td>$row[name1]</td>
					<td>$row[name2]</td>
					<td>$row[name3]</td>
					<td>$row[name4]</td>
					<td>$row[name5]</td>
					<td>$row[name6]</td>
					<td>$row[name7]</td>
					<td>$row[name8]</td>
					<td>
					<form action='www.test.de' method='post' >
					<input type='hidden' name='name1' value='".$row['name1']."' />
					.....
					<input type='hidden' name='name21' value='".$row['name21']."' />
Hab das mal theoretisch geschrieben. gibt halt die werte name1 bis name21
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
Sehe ich das richtig, daß du nur diejenigen Datensätze aus dem Ergebnis brauchst, für die trim($row['namex']) == $_GET['namex']) gilt? Dann nämlich wäre es besser, diese Bedingung in die WHERE-Klausel mit einzubauen. Soviel wie möglich die Datenbank machen zu lassen ist im allgemeinen performanter als nachher das Abfrageergebnis mit PHP zu bearbeiten.

Im übrigen sind heutige Datenbanken hochoptimiert und packen ihre üblichen Aufgaben rasend schnell. Wenn du sie nicht mit Unmengen von Anfragen bombardierst oder auf lahmer Hardware laufen läßt, sollte die Datenbank deine Anwendung nicht ausbremsen.
 

furryhamster

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
1.022
trimfunktion dient nur dazu, um zu prüfen ob eine E-Mail-Adresse übereinstimmt, da die E-Mail in der Datenbank aus irgendwelchen Gründen mit leerzeichen am Ende steht.

Werde das ganze dann mal umbauen und auf sql statements setzen. danke für die antworten
 

surtic

Commander
Dabei seit
Dez. 2007
Beiträge
2.055
an sich sollten SQL Abfragen kein Problem darstellen, die sind heutzutage ja rasend schnell. wir haben teile bei unserer php Applikation die Sehr Grosse abfragen per SQL macht und meistens nicht nur 1 sondern gleich mehrere aber die Seite lädt sich dennoch unter 0.5 Sec. Aber auch hier wäre durch Optimierung sicher noch was möglich.
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
trimfunktion dient nur dazu, um zu prüfen ob eine E-Mail-Adresse übereinstimmt, da die E-Mail in der Datenbank aus irgendwelchen Gründen mit leerzeichen am Ende steht.
finde dich nicht damit ab, dass da "irgendwie Leerzeichen" am Ende stehen, sondern behebe die Ursache des Problems und du kannst wie NullPointer richtig gesagt hat gleich einen viel effizienteren Query nutzen.
Generell ist eine Datenbank mehr als schnell genug, langsam wird es erst, wenn du Querys ineffizient formuliert oder ein sehr schlechtes Datenbankmodell hast. I.R. reicht es vollkommen dich erst um die Performance zu kümmern, wenn es nötig ist, was jedoch nicht bedeutet, dass du vorher machen kannst, was du willst. Intelligent solltest du dein Datenbankschema und deine Abfragen schon bauen.
Am besten mal ein wenig in die DB-Optimierung reinlesen, damit du ein grobes Verständnis bekommst, dann werden dir auch weniger große Fehler unterlaufen.
Und selbst wenn sie dir unterlaufen sollten, ist dies nicht schlimm, ich sehe diese bei quasi jedem Projekt, bei dem ich die DB untersuchen soll, i.R. sind diese Probleme aber sehr leicht zu beheben.

an sich sollten SQL Abfragen kein Problem darstellen, die sind heutzutage ja rasend schnell. wir haben teile bei unserer php Applikation die Sehr Grosse abfragen per SQL macht und meistens nicht nur 1 sondern gleich mehrere aber die Seite lädt sich dennoch unter 0.5 Sec. Aber auch hier wäre durch Optimierung sicher noch was möglich.
Also 0.5 Sekunden ist schon extrem viel. Rechnest du da die Zeit für HTTP-Abfragen, Webserver usw ein?
Denn eine normale PHP-Seite sollte im Rendering nichtmal 50msec benötigen, und da rechne ich schon mit mal 15 SQL-Querys.
 

furryhamster

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
1.022
Im Prinzip gebe ich dir recht, dass dort keine Leerzeichen stehen sollten. Problem steht darin, dass ich nur eine Erweiterung schreiben soll. Mir fehlt quasi die "Berechtigung" an anderen stellen etwas zu ändern und muss daher die leerzeichen hinnehmen

habe jetzt im vergleich zu vorher recht viele sql statements. es läuft jetzt alles wie es soll und schneller als vorher ist es auch noch
 

surtic

Commander
Dabei seit
Dez. 2007
Beiträge
2.055
@ice-breaker: Du weist ja nicht was wir alles aus der DB holen... ist ja auch keine standard Applikation :) klar hätte dazuschreiben sollen dass es Hunderte von Datensätzen sind die dann auch aufgebaut werden müssen.
 
Top