Meherer "kleine" DB-Abfragen oder eine "große"?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Meherer "kleine" DB-Abfragen oder eine "große"?

    Tachchen,

    ich bin gerade am überlegen, welche der beiden Varianten performanter ist.

    Variante 1 wäre, eine Select-Query zu setzen und aus dieser dann immer die jeweils relevanten Datensätze auszulesen.

    Variante 2 wäre, z. B. 5 Select-Querys zu machen, welche dann nur noch ausgegeben, und nicht mehr aussortiert, werden müssen.


    Verstanden?
    mfg - sagg

  • #2
    nein
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Ohne dir zu nahe treten zu wollen - die Art deiner Fragestellung lässt vermuten, dass du das eine oder andere beim arbeiten mit Datenbanken noch nicht ganz verstanden hast.

      Jedenfalls kann man aus deiner Fragestellung nicht ersehen, was du genau meinst/willst.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        Also...
        dann mal ein Beispiel.
        PHP-Code:
        $result $db->query('SELECT ... WHERE feld=blubb');
        while (
        $row mysql_fetch_assoc($result) {
          
        $list[] = $row;
        }

        foreach (
        $list AS $row) {
          if (
        $row['irgendwas'] == 'das') {
            
        // echo oder sonstwas eben
          
        }
        }
        foreach (
        $list AS $row) {
          if (
        $row['was_anderes'] == 'dies' && $row['blubb'] == 'lala') {
            
        // echo oder sonstwas eben
          
        }
        }
        // und noch mehr solcher foreach's..
        // wobei es durchaus vorkommen kann, das manche dieser foreach's
        // umsonst durchlaufen, da es zu dem zeitpunkt eben keine "treffer" gibt 
        Oder eben das
        PHP-Code:
        $result $db->query('SELECT .... WHERE feld1=bla AND feld2=blu ...');
        while (
        $row mysql_fetch_assoc($result)) {
          
        // echo oder sonstwas..
        }
        $result $db->query('SELECT .... WHERE feld1=bla AND feld3=das AND feld4=dies ...');
        while (
        $row mysql_fetch_assoc($result)) {
          
        // echo oder sonstwas..
        }
        // oder eben das ganze paar mal mit verschiedenen Query's 
        Mir geht's imho nur darum, ob es performanter ist PHP mit den ganzen foreach's und if's arbeiten zu lassen, oder doch lieber paar DB-Zugriffe mehr zu haben, damit aber PHP zu ersparen, das gesamte Array paar mal durchzurasseln.

        War das verständlich genug? ^^
        mfg - sagg

        Kommentar


        • #5
          Solange du die Daten nicht direkt ausgibst (sondern z.B. in andere Arrays kopierst), kannst du auch mehrere if-Abfragen innerhalb derselben foreach-Schleife anwenden bzw. sogar schon direkt in der while-Schleife die das DB-Result auswertet.
          hopka.net!

          Kommentar


          • #6
            Seh ich das richtig, dass du also z.B. 5 völlig verschiedene Querys absetzen willst und die Ergebnisse auf EINER Seite darstellen willst?

            Prinzipiell würd ich dazu mal sagen, dass ne DB halt einfach dafür geschaffen ist um darin rumzusuchen, sortieren usw. - PHP dürfte da doch eher langsam sein, wenn du da dann ständig ein Array durchläufst und mit if() nach deinen Treffern fahndest.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              @Quetschi,
              Japp, genau das ist der Punkt.
              Ich werde das wohl mal eben ausprobieren und die Zeit messen.
              Diese eine Seite hat so wie sie jetzt ist um die 50 DB-Zugriffe (in meinen Augen ist das sehr viel?!), durch die foreach's könnte man diese ja etwas reduzieren, mal schauen ob das was bringt.
              mfg - sagg

              Kommentar


              • #8
                Bei 50 DB-Zugriffen könnte es evtl. ein Faktor werden, dass die DB natürlich jedesmal nen Festplattenzugriff erzeugt sofern nicht ein Cache-mechanismus der DB zum Zuge kommt - während PHP das Ergebnis einmal im RAM hätte und da natürlich schneller gearbeitet wird - was genau dabei rauskommt wirst dir aber in der Tat 'rausmessen' müssen.

                Evtl. als 3. Alternative:
                Du setzt zuerst eine 'Grundquery' ab (wo ja evtl. ja auch schon eine vorselektierung stattfindet wie ich aus deinem Beispiel sehe) und bildest mit dem Resultat eine temporäre Heap-Tabelle (sofern du auf deiner DB die REchte dazu hast) und arbeitest mit deinen restlichen Abfragen auf dieser Heap-Tabelle (die ja im RAM ist und dadurch deutlich schneller sein sollte).
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Ich hab gerade ein paar Query's raus genommen und dafür foreach's rein gepflanzt...
                  Den Timer zu basteln hätte ich mir da auch sparen können, da die Ladezeit von ca. 0,5 Sekunden auf durchschnittlich ca. 3 Sekunden gestiegen ist und der Apache auf einmal 400 MB RAM gefressen hat.

                  So eine temporäre Datenbank (Meinst du doch, oder?) zu erstellen wäre vielleicht eine Idee, muss ich mich aber erstmal in das Thema rein fitzen.
                  Von den Rechten her gibts da keine Probleme, da ich z. Z. den Admin spielen darf...

                  Wäre nur wieder das Problem, dass nicht zu viel Ram beansprucht werden darf, da auf diesem Server auch noch ein recht umfangreiches Programm läuft. Aber das sollte dann mein Problem sein (Bzw. dass des Chef's, zwecks mehr RAM ^^).

                  Wie gesagt, ich verkriech mich mal ins MySQL-Manual.

                  Danke dir, daran hab ich noch gar nicht gedacht, vlt. weil ich's noch nie verwendet habe.
                  mfg - sagg

                  Kommentar


                  • #10
                    Temporäre Tabelle vom Typ Heap meine ich - keine temporäre DB.

                    Wenn jedoch die Ergebnismenge so umfangreich ist dass 400MB Ram draufgehen (außer du versäumst es evtl. überflüssige Arrays zu unsetten), dann ist es wahrscheinlich am sinnvollsten bei den 'gängigen' Methoden zu bleiben - testen kannst du es trotzdem mal mit der temporären Tabelle.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Omg, wo war ich nur mit meinen Gedanken, als ich diesen Thread eröffnet habe. Die Fragestellung ist ja wirklich vollkommen sinnbefreit.


                      Aber ich glaub, ich werde wohl doch bei der "normalen" Methode bleiben.
                      Ich hab den Spass bis jetzt mit einer von 7 Tabellen probiert und der Ram wird schon wieder ganz schön beansprucht, zwar nicht so sehr wie bei dem anderen Versuch, aber wenn ich überlege, das diese Tabelle gegenüber den anderen noch recht klein ist, kann das imho nur nach hinten los gehen.

                      Na dann, einen Versuch wars ja wert.

                      Thx nochmal.
                      mfg - sagg

                      Kommentar

                      Lädt...
                      X