Datenbankabfragen

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

  • Datenbankabfragen

    Hallo,

    wo finde ich Tutorials um Datenbankabfragen zu beschleunigen? Wenn ich mehere 100 User gleichzeitig auf meiner Seite habe, dann wird der Server ziemlich langsam, manchmal stürzt er auch ab.

    Nun bin ich auf der Suche nach passenden Tutorials, die mir dabei behilflich sind, dies in Zukunft zu verhindern.

    Wer kann mir bitte dabei weiterhelfen?


    Viele Grüsse
    Davidt

  • #2
    Re: Datenbankabfragen

    EXPLAIN <Query>

    z.B.
    EXPLAIN SELECT * FROM tabelle WHERE name = "ghostgambler"

    Gibt dir dann Infos aus, wie die Infos auszuwerten sind findet sich in der MySQL-Manual

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Ausserdem solltest du dich über grundliegendes Datenbanklayout und Joins informieren. Richtige Indizierung der Tabelle macht auch Sinn.

      Du solltest daran arbeiten die Anzahl deiner Queries zu minimieren. Ausserdem kann es Sinn machen ins "Slow-Query-Log" des Servers zu schauen.

      Wenn du eine Datenbankklasse hast, oder eine zentrale Funktion wo du deine Queries ausführst ist es sehr leicht die Zeit und die Anzahl der Queries zu messen und damit die "bösen Jungs" aufzuspüren.

      Kommentar


      • #4
        Original geschrieben von prego
        Joins
        Aber ich hoffe mal um sie nicht zu benutzen? oo,
        Joins können zwar einfacher sein, können manchmal auch besser sein als sich etwas mit php zusammenzuschustern, in den meisten Fällen sind sie aber total overdone und können viel besser durch separate Queries gemeistert werden ^^,

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Original geschrieben von ghostgambler
          Aber ich hoffe mal um sie nicht zu benutzen? oo,
          Joins können zwar einfacher sein, können manchmal auch besser sein als sich etwas mit php zusammenzuschustern, in den meisten Fällen sind sie aber total overdone und können viel besser durch separate Queries gemeistert werden ^^,
          Das interessiert mich nun mal. Nehmen wir mal eben irgendein Beispiel, z.b. ein Mini-Forum. (Nur für die Struktur.)

          Dann habe ich eine Tabelle user mit usern, also mit id | nick. Lass es 1000 User sein.

          Dann habe ich eine Tabelle entries mit Einträgen, sagen wir 5000 Stück.
          Mit entry_id | user_id | datum | text.

          Jetzt will ich, eigentlich egal was, sagen wir, die Beiträge mit usernamen von monat x ausgeben.

          Also irgendwie sowas (JOIN-Lösung):
          PHP-Code:
          SELECT datumtextnick FROM entries
           LEFT JOIN user ON entry
          .user_id user.id WHERE monat(datum) = 
          Wie soll das sein mit separaten Queries? Erstmal alle Beiträge aus dem Monat x, daraus ein Array, dann eine Query nach dem nick für alle user die im Array stehen, und dann zusammensetzen? Das ist wirklich performanter?

          Wahrscheinlich hat mein Beispiel verfehlt was du meintest, dann kannst du mir ja vielleicht ein anderes geben.

          Bitte erklärs mir
          ich glaube

          Kommentar


          • #6
            ich finde das auch spannend!
            in jedem Fall glaube ich nicht, dass in dem Beispiel von
            @ministry etwas ausser Join in frage kommt.

            Aber es gibt vielleicht ein paar spetiele Fälle, die bei Verzicht auf joins vorteile bringen.
            welche?(keine ahnung)
            Zuletzt geändert von Slava; 14.07.2006, 17:35.
            Slava
            bituniverse.com

            Kommentar


            • #7
              Manche Sachen kann man tatsächlich ohne Joins besser lösen.

              Hatte letztens was um die Freunde 2ten Grades zu selecten. Es machte keinen Sinn die Relationstabelle 3mal zu joinen (Geschwindigkeit) - es war einfacher 2 Queries zu machen.


              Im angeführten Beispiel mit dem Forum würde ich aber auf jeden Fall nen Join machen - 1 Query im vergleich zu "Einträge Monat x+1" Queries.

              Kommentar


              • #8
                ... dann bin ich ja beruhigt und kann meine zahlreichen und unheimlich praktischen Join-Queries alle so lassen

                Dass es Sonderfälle gibt, in denen das zu kompliziert (bzw. damit zu langsam) wird, ist schon klar.... mir war nur so, als hätte ich was von "den meisten Fällen" und "total overdone" gehört... komisch.

                btw:
                ... 1 Query im vergleich zu "Einträge Monat x+1" Queries.
                Alternativ hätte man auch das erste array zu einem riesigen WHERE implodieren können, und hätte so nur zwei Queries - aber viel praktischer wird es damit auch nicht.

                Gruß,
                ministry
                ich glaube

                Kommentar


                • #9
                  Original geschrieben von prego
                  Hatte letztens was um die Freunde 2ten Grades zu selecten. Es machte keinen Sinn die Relationstabelle 3mal zu joinen (Geschwindigkeit) - es war einfacher 2 Queries zu machen.
                  das ist schon mal ein sehr gutes beispiel. und ähnliche problematiken gibt es auch genügend.

                  ein monster-JOIN über keine ahnung wie viele tabellen ist langsamer als 1-2 oder 3 einzel-abfragen.

                  aber auch monster-JOINs können schnell sein, wenn man seine DB korrekt und vernünftig designt. es soll leute geben, bei denen eine monster query über eine din-a4 seite recht flott ist. ( ich nenne keine namen )
                  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


                  • #10
                    @Abraxas: Thats what I'm talking about

                    Kommentar


                    • #11
                      OffTopic:
                      bitte mit x am ende.


                      das sollte auch nur eine zustimmung sein.
                      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

                      Lädt...
                      X