+ Antworten
Ergebnis 1 bis 3 von 3

Thema: PHP Codeoptimierung für MySQL Abfragen

  1. #1
    5ky
    5ky ist offline
    Neu an Board
    Registriert seit
    26.07.2010
    Beiträge
    48
    Bedankte sich
    5
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard 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

  2. #2
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    49
    Beiträge
    2.934
    Bedankte sich
    112
    Erhielt 453 Danksagungen
    in 429 Beiträgen

    Standard

    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.

  3. Erhielt Danksagungen von:

    5ky

  4. #3
    Hat hier eine Zweitwohnung Avatar von progandy
    Registriert seit
    25.06.2007
    Beiträge
    1.939
    Bedankte sich
    13
    Erhielt 640 Danksagungen
    in 577 Beiträgen

    Standard

    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!

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein