-
PHP Codeoptimierung für MySQL Abfragen
Hey,
ich hab eine Frage welche ich mit folgendem Beispiel veranschaulichen möchte:
In einer selbst entwickelten Komponente habe ich die Möglichkeit, Rechnungen zu schreiben. Hier kann ich natürlich u.a. meinen Kunden auswählen und natürlich auch die einzelnen Rechnungspositionen, welche auf die Artikeltabelle zugreifen.
ANGENOMMEN:
Ich habe eine Rechnung mit 100 Positionen (Artikel)
und eine gut bestückte Artikeltabelle (z.b. 100.000 Artikel)
Wie realisiere ich aus Programmiersicht am Besten die Abfrage der einzelnen Positionen. Mir fallen 2 Möglichkeiten ein:
1. Variante- ich erstelle EINEN SELECT zur Datenbank, welcher mir ALLE Artikel in ein Array schreibt
- ich erstelle eine FOREACH Schleife, um meine Positionen der Rechnung zu erhalten
- darin erstelle ich eine FOREACH oder WHILE Schleife, welche mir dann das Array der Artikel durchläuft
- darin dann z.B. eine IF Abfrage, z.B. wenn die PositionsID = ArtikelID ist dann verwende diesen
Vorteil: Nur 1 Select
Nachteil: Bei jeder Position wird das komplette Array durchlaufen. Klar kann man die Schleifen so legen, dass er aufhört wenn er einen gefunden hat. Aber sind die 100 Positionen die letzten meines Artikelarrays kanns wohl etwas dauern.
2. Variante- ich erstelle eine FOREACH Schleife, um meine Positionen der Rechnung zu erhalten
- darin erstelle ich einen gezielten SELECT mit einer WHERE Klausel, welche die IDs vergleicht
Vorteil: ich erhalte nur die Daten die ich auch brauche
Nachteil: in diesem Beispiel währen das 100 einzelne SELECT Abfragen.
So und nun die Frage. Welche Variante ist die Bessere und warum? Oder gäbe es noch weitere, vielleicht sogar noch bessere Lösungsmöglichkeiten?
MfG
5ky
-
-
Wohnt hier
Definitiv die 2. Variante.
100 Selects verursachen vermutlich weit weniger Belastung auf dem Server als 1 Select mit 100.000 Rückgabewerten.
Zumal deine angenommenen 100 Artikel ja auch nciht in jeder Rechnung befinden werden. das werden sicherlich häufig weniger sein.
die 100.000 würden aber immer!! zurückgegeben.
-
Erhielt Danksagungen von:
-
Hat hier eine Zweitwohnung
Die beste Variante ist diese: Mit einer Foreach alle Positionen zusammensuchen, daraus eine einzige WHERE-Klausel basteln (z.B. "WHERE id IN (12, 24, 1245, 125, 765)" ) und eine Abfrage absetzen.
Suche und FAQ helfen bei Problemen oft weiter!
-
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
Foren-Regeln
Lesezeichen