Schulnote für Query

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

  • #16
    Original geschrieben von tomtherock
    ja klar glaub dir da schon hab ja jetzt auch mal im Internet bissal
    gestöbert...stimmt schon rand() ist nicht so dolle nur warum MYSQL dann
    so ne BETA Funktion drin hat frag ich mich halt bzw einfach unausgereift..
    Wozu poste ich überhaupt?
    Original geschrieben von ghostgambler
    Man kann RAND() ja nicht nur in Verbindung mit ORDER BY benutzen.
    Hab jetzt eigentlich super Ergebnisse mit folgendem gemacht:

    einfach query ohne LIMIT und rand()
    alle per while/for in array schreiben

    mit count einfach max für rand() berechnen und dann so
    id_artikel[$key] einfach ansprechen so is der QUERY superschnell und
    der Compiler hat auch bissal was zu tun.

    hab ein paar scripte überarbeitet und zeigt schon die ersten erfolge weil
    ich viele Temp Tabellen dadurch vermeide vorallem auch mit EXISTS anstatt mit JOINS
    Du machst jetzt nicht ernsthaft einen Query allá
    PHP-Code:
    SELECT t1.id_artikel,t3.titel,t4.bildpfad,t2.id_verwendung
    FROM s_happyhour 
    as t1 
    INNER JOIN s_zuweisung 
    as t2 ON t1.id_artikel t2.id_artikel 
    INNER JOIN s_artikel 
    as t3 ON t1.id_artikel t3.id_artikel
    INNER JOIN s_bild 
    as t4 ON t1.id_artikel t4.id_artikel 
    WHERE t1
    .uhrzeit 13 
    AND aktiv 
    AND aktiv_gr 
    AND t2.id_verwendung 
    und lädst das ganze in ein Array?!

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

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

    Kommentar


    • #17
      ja mache ich weil ich auch dein Beispiel ausgetestet hab, und da ich ja
      mein DB Server entlasten will ist bei dir folgendes nötig:

      UPDATE: set = rand() ==> Betroffene Datensätze: 1595 (die Abfrage dauerte 0.0074 sek.)
      SELECT: ORDER BY rand LIMIT 1 ==> (1 insgesamt, die Abfrage dauerte 0.0010 sek.)
      UPDATE: SET rand = NULL WHER ID = blabla ==> (die Abfrage dauerte 0.0004 sek.)

      Ich benötige lediglich ein Abfrage die den DB belastet:
      SELECT: ==> (die Abfrage dauerte 0.0004 sek.)

      Der weg über UPDATE -> SELECT -> UPDATE dauert im Vergleich insgesamt:
      0.0088 Sek ==> zu 0.0004 sek natürlich braucht der Compiler für die Schleifen doch spätestens wenn ich den DB und Webserver teile kommt
      mir dieses System doch zugute!

      Kommentar


      • #18
        Wenn du aber die ganze Tabelle in PHP ausließt hast du dort ein Riesenarray liegen. Du verlagerst den Aufwand also teilweise auf PHP, das Auslesen der Datensätze kostet MySQL aber auch einen Haufen sinnlos-Aufwand. Im schlimmsten Fall packst du dir damit sogar dein PHP memory_limit voll!

        Wäre es nicht auch eine Lösung, wenn du dieses rand-Feld einmal am Tag oder so berechnest und anschließend nach dem Auslesen des aktuellen Datensatzes dessen rand-Wert hoch setzt?

        Kommentar


        • #19
          ja klar könnte ich schon machen nur ich seh es nicht ein für ne RANDOM funktion nen Conjob laufen zu lassen...zudem is das Array wieder mit unset() danach zu löschen und so den speicher frei zusammen.

          Hab das ganze getestet der Compiler mit dem array rand ist 70% schneller in der script ausgabe + mysql perfomance ersparnis!

          mit UPDATE RAND usw... brauch ich mehr MySQl und scriptausgabe ist
          länger weil der Apache auf den MYsql länger warten muss.


          Zudem ist später mal ein Webserver aufrüsten wesentlich kostengünstiger
          als ein DB-Server mit nem teuren RAID mit raptor Platten.
          Zuletzt geändert von tomtherock; 28.11.2007, 11:25.

          Kommentar


          • #20
            1. Ein Webserver braucht den RAM definitiv anders, als sinnlos eine komplette Tabelle in den Ram zu schieben.
            Sobald Web- und Datenbankserver getrennt sind, muss die komplette Tabelle bei jedem dieser Queries über das Netzwerk geschoben werden.
            Möchtest du dir mal ausrechnen wie viele Prozesse gleichzeitig laufen können, wenn man von einer (durchaus realistischen) Größe von 100 MB für die Tabelle ausgeht? Da geht schneller das Netzwerk zugrunde, als jeglicher RAM, und wenn du dann 3 Netzwerkkarten hast, damit du mit der Bandbreite hinkommst, fängt dein Webserver an zu swappen... ob unset oder nicht.
            2. Der Datenbank-Server braucht für die 3 Queries praktisch gar keine weiteren Ressourcen. Das Aufwändigste ist der große UPDATE-Query, das ist in der Tat etwas unhübsch, der SELECT und das UPDATE mit ID=XYZ sind hingegen super-simple Queries (ein Index auf die rand-Spalte hilft).

            Alternativ könnte man sich den großen UPDATE-Query sparen (bzw. ein einziges Mal fahren), und danach bei neuen Datensätzen, oder Datensätzen die ausgewählt werden, ein UPDATE Tabelle SET rand = RAND() WHERE id = XYZ; machen.

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

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

            Kommentar

            Lädt...
            X