mmofacts.com

Schnelligkeit von php scripten

gepostet vor 18 Jahre, 5 Monate von sami06
ICh bastle wie ziemlich viele hier^^ an einem browsergame und bin immer ebmüht, den php code, der dahinter steckt so schnell wie möglich zu machen...., daher mal so ne frage meinerseite, welche tricks und co kennt ihr so, um php scripte schön schnell zu halten und machen....
und noch eine frage, wo liegen die vorteile bei
SELECT name FROM tabelle.....

im gegensatz zu
SELECT * FROM ....

mfg
sami
gepostet vor 18 Jahre, 5 Monate von Mudder
Naja das ist jetzt aber nicht PHP sondern SQL..
Und ein Geschwindigkeitsvorteil dürfte so kaum messbar sein.. jedenfalls nicht wenn du eh alle Elemente auslesen willst. Aber wenn du nur das "name"-Element brauchst dann wäre es natürlich unsinnig auch "id", "email", usw. auszulesen. Dies dürfte zwar auch nur ein Milisekunden-Vorteil bringen, aber du speicherst Speicher für DB und Script weil die weniger Daten verarbeiten müssen.
Persönlich verwende ich übrigends immer eine genaue Namensauswahl und kein * .
gepostet vor 18 Jahre, 5 Monate von Tetha
Zudem hat die Variante mit der Namensliste auch andere Vorteile, die nicht nur in der Geschwindigkeit liegen.
Wie Mudder schon sagte, du wirst idR nicht alle Daten aus der Tabelle brauchen (ausser sie liegt in der 4. oder 5. Normalform vor ) und dementsprechend wird es vor allem dann vorteilhaft, wenn du die Tabelle erweiterst, da du dann weniger Muell zusammensammelst.
Dann ist die Variante mit der Namensliste freundlicher, wenn andere deinen Code verstehen sollen, da sie sich nicht mit deiner Datenbank befassen muessen, sondern sie sehen gleich in der Anfrage, welche Datenfelder es im entsprechenden Ergebnisarray gibt.
Weiterhin kannst du auch bei der Namensliste Aliase angeben, was mitunter die Lesbarkeit erhoeht...
Der einzige Vorteil auf Seiten des * ist, dass er weniger Platz braucht und schneller getippt ist, aber das ist imo nicht als wirklicher Positivpunkt zu werten - und selbst wenn man es als Positivpunkt wertete, steht er immer noch 3 anderen Punkten gegenueber
MfG
gepostet vor 18 Jahre, 5 Monate von Itchy
Hat aber einen großen Nachteil, wenn man immer die Felder explizit angibt: wenn man der Tabelle mal eine Spalte hinzufügt, darf man sämtliche Abfragen durchforsten, ob da auch diese neue Spalte benötigt wird oder nicht.
Ich mache es so: Funktionen, die explizit nur ein oder ein paar Felder zurückgeben sollen (z.B. get_id() oder get_name()), wählen die Felder in der Tabelle (also SELECT id FROM tabelle WHERE...) aus. Bei Funktionen, die ganze Objekte zurückgeben (get_unit(), get_item()), mache ich grundsätzlich ein * daraus, damit kann ich sicher gehen, daß damit alle Bedürfnisse abgedeckt sind.
Daß es mehr Speicher benötigt, ist klar - aber solange ich da nicht an meine Grenzen stoße, sehe ich keinen Grund, das zu optimieren und dafür die "Upgradekosten" (Zeit für Codeänderungen beim Ändern der Datenbank) unnötig aufzublähen.
gepostet vor 18 Jahre, 5 Monate von exe
Original von Itchy
Hat aber einen großen Nachteil, wenn man immer die Felder explizit angibt: wenn man der Tabelle mal eine Spalte hinzufügt, darf man sämtliche Abfragen durchforsten, ob da auch diese neue Spalte benötigt wird oder nicht.

Hat aber auch einen großen Vorteil: wenn du die Feldnamen generell nicht angibst kriegst du bei einem INSERT den Fehler "Column count does not match value count" weil es plötzlich mehr Spalten als Werte, die du hinzufügst, gibt.
So musst du aus Fehlersicherheit bei INSERTs generell schon mal alle Spalten manuell hinschreiben. Aus Gründen der Lesbarkeit macht es imho auch bei SELECTs Sinn. In dem Fall steht immer fest, welche Spalten zur Verfügung stehen. Du kommst nicht zu dem Problem das du im Code plötzlich auf eine Spalte zugreifst die nicht mehr existiert weil sie zwischenzeitlich gelöscht wurde und sich das in deinen Abfragen nicht bemerkbar gemacht hat. Und du liest auch keine Werte aus die gar nicht gebraucht werden.
gepostet vor 18 Jahre, 5 Monate von Mudder
@Itchy: Deine Theorie hat ein Denkfehler. Wenn du in eine Tabelle ein neues Feld einfügst, dann wird das neue Feld in deinem Script auch so keine Auswirkungen haben.
Wenn du das Feld im Script nicht verarbeitest dann kannst du 20 neue Felder einfügen.. das Script braucht sie ja nicht. Naja und wenn du schon das Script änderst um mit dem neuen Feld arbeiten zu können, dann kann man den Feldnamen auch eben in den Query mit einbinden.
gepostet vor 18 Jahre, 5 Monate von Kampfhoernchen
Doch, kann es.
while($zeile=next_row){
foreach($zeile ....
}
gepostet vor 18 Jahre, 5 Monate von unverbraucht
Einen spürbaren Geschwindigkeitsvorteil hat ein SELECT name gegenüber einem SELECT * afaik genau dann, wenn die Felder, die zurückgegeben werden auch gleichzeitig Indizes sind. Denn dann werden die Tabellendaten garnicht erst geöffnet, sondern nur der Index-Bereich. Wenn die Daten oft benötigt werden und nur wenig Platz brauchen, macht das vielleicht Sinn.
Das ganze klappt natürlich nur, wenn sich die where-Constraints auf indizierte Felder beziehen. Sonst ist der Vorteil fürn A*, weil der DB-Server die Tabelle selbst durchsucht, und dann hoffentlich nicht auch noch den Index-Bereich öffnet um die Daten zu lesen
gepostet vor 18 Jahre, 5 Monate von Magic007
zum Thema allgemein ein paar "Tipps":
-Trinärer Operator ist recht schnell
-$i++ schneller als $i=$i+1
-$a = "schöne";
$b = "Ach du $a Welt";
$c = 'Ach du '.$a.' Welt'; // Mit Verknüpfungsoperator 2-3 mal schneller
-Caching Systeme verwenden
gepostet vor 18 Jahre, 5 Monate von friedenspanzer
Original von Magic007
-$a = "schöne";
$b = "Ach du $a Welt";
$c = 'Ach du '.$a.' Welt'; // Mit Verknüpfungsoperator 2-3 mal schneller

Am schnellsten wäre aber wohl
 $a = "schöne";

$b = "Acu du " . $a . " Welt";
(Mit ganz kurzem Link)
Unverbraucht: Schreib bitte A*****, ich dachte zuerst an A-Star ^^
gepostet vor 18 Jahre, 5 Monate von KtRhN
Trau keiner Statistik die du nicht selbst gefälscht hast. Jede Benchmarkseite sagt da bissel was anderes. Ich verwende weiterhin single quotes, einfach weil es auch vom logischen her am schnellsten sein müsste.
gepostet vor 18 Jahre, 5 Monate von progs
Ist es auch. Den Strings, welche mit " eingeschlossen sind, werden vom PHP-Parser nach Variablen durchsucht, was mit ' nicht der Fall ist.

Auf diese Diskussion antworten