MySql - Effizienz

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

  • MySql - Effizienz

    Hi,

    hab mal ne Frage was besser ist:

    ich hab ne tabelle mit 150 einträgen (ein paarmal datetime das meiste sind integer)

    was ist nun besser, ich mach zwei abrufe, zuerst schaue ich mir nur einen wert der tabelle an, der besagt, ob diese verändert wurde seit dem letzten aufruf, und nur wenn das positiv ist rufe ich alle daten ab, in einem zweiten aufruf

    oder ich rufe direkt alle daten mit * ab
    verantwortlich für Elygor - Das kostenlose Browserspiel

  • #2
    wir wäre es mit "du rufst in einer Abfrage alle Werte ab, die verändert wurden"?

    oder ich rufe direkt alle daten mit * ab
    never ever!

    Kommentar


    • #3
      *verschieb* ich mal!

      Kommentar


      • #4
        ich weiss aber net ob und wenn welche daten verändert wurden
        verantwortlich für Elygor - Das kostenlose Browserspiel

        Kommentar


        • #5
          was spricht gegen nen abruf mit *


          sry für doppelpost
          verantwortlich für Elygor - Das kostenlose Browserspiel

          Kommentar


          • #6
            performance - steht auch irgendwo in der mysql-manual, obwohl deren beispiele auch meist mit * sind
            (-:
            Bookmarks:·Bilder·Jobs·Recht·
            kostenloser Webkataloge-Assistent

            Kommentar


            • #7
              * nimmst du meistens nur, um die tipparbeit zu sparen, aber was, wenn deine tabellenstruktur sich ändert?
              dann sind nämlich evtl. mehr felder vorhanden (die auch ganz schön groß werden können) und die reihenfolge der felder kann ebenfalls anders sein
              außerdem muss so die datnebnak erst ein DESC tabelle(n) machen um die spaltennamen rauszukriegen


              wie unterscheidest du denn, ob werte geändert wurden?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                naja ich hab einen wert changing den ich mit
                -1: nicht initialisiert
                0: keine änderung
                1: wird gerade geändert
                2: wurde geändert
                besetze

                wenn ich jetzt (bei jedem neuen seitenaufruf) die neusten daten haben will muss ich also viele daten neu laden

                ihr meint also wirklich es geht schnelelr wenn ich SELECT (spalte1, spalte2, ..., spalten) mache anstatt nem SELECT *
                er muss doch so oder so feststellen wo sich die daten befinden oder nicht?

                ich mein ich hab keine ahnung davon deshalb frage ich ja, ich weiss halt nicht wie gross der belastungsunterschied ist zwischen ner abfrage nach einem wert oder direkt nach allen werten
                verantwortlich für Elygor - Das kostenlose Browserspiel

                Kommentar


                • #9
                  und mit
                  Code:
                  SELECT spalte1, spalte2, ...
                  FROM tabelle
                  WHERE changing=2
                  bekommst du nicht alle datensätze die gerade geändert wurden?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    8 Stunden und 17 Minuten bis dieser Vorschlag kam ... herzlichen Glückwunsch ...
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      ne du hastt mich falsch verstanden
                      ich speicher für jeden benutzer die daten, quasi habe ich einen primärschlüssel ID über den ich auf die spalte zugreifen kann spalte sieht (ain echt is sie viel länger ) in etwa so aus

                      ID, name, passwort, email, daten1, daten2, daten3, status, changing, ...


                      und changing gibt mir jetzt an, ob irgendwas von dem benutzer geändert wurde

                      naja also wenn ihr meint * is schlecht, kann ich ja im SLECT einfach nur die spalten abfragen, deren werte ich zum aufbau der jeweiligen seite brauche, is natürlich etwas mehr programmierarbeit, aber da hab ich schon ne idee wie ich das einfach hinbekomme *g*

                      also statt SELECT *
                      SELECT daten1, daten2, daten3, ...

                      braucht den MySQL da nicht länger zum auswerten des ausdrucks? kanne r bei * net einfach alle daten der zeile nehmen und in mein object reinhaun? muss MySQL net feststellen an welcher posi sich meine jeweiligen element befinden, die ich explizit haben will?
                      verantwortlich für Elygor - Das kostenlose Browserspiel

                      Kommentar


                      • #12
                        mysql braucht nicht länger, da es nicht erst nachschauen muss wie die spalten heißen, du sprichst in php ja auch nicht mit * an sondern mit dem spaltennamen oder?

                        warumn mein WHERE changing=2 nicht gehen sollte is mir aber schleierhaft
                        hast du's probiert?
                        was kommt raus?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          - hab aussversehen enter gedrückt und darf hier net löschen
                          Zuletzt geändert von sEeb; 01.12.2003, 14:58.
                          verantwortlich für Elygor - Das kostenlose Browserspiel

                          Kommentar


                          • #14
                            hm

                            es könnte sein dass wir aneinander vorbeireden

                            du meinst SELECT daten1, daten2 FROM x WHERE ID=$id AND changing=2 LIMIT 1 ?

                            dass hiesse also, dass er nur dann die daten lädt, wenn bei nem benutzer den ich untersuche der changing flag gesetzt ist

                            muss ich dann changing als index machen? eigentlich net, oder weil ja ID der primärschlüssel ist und er nur den sucht und dann noch nachschaut ob der flag gesetzt ist

                            naja wäre natürlich ne möglichkeit

                            aber erstmal mache ich hauptsächlich den stern weg, müsste ja einfach gehen, wenn mans wie folgt macht

                            idee:
                            PHP-Code:
                            function getUser($id$query) {
                              
                            // verbindung zu server und datenbank herstellen
                                
                            ...
                              
                            // query
                              
                            $query "SELECT ".$query." FROM spieler WHERE ID='$id' AND changing=2 LIMIT 1";
                              
                            $result mysql_query($query$link);
                              if (!
                            result) {
                                
                            mysql_close($link);
                                return 
                            FEHLERCODE;
                              }

                              
                            $object mysql_fetch_object($result);
                              return 
                            $object;


                            aufruf dann zb $_SESSION["spieler"] = getUser($_SESSION["spieler"]->ID, "name, email, daten1");


                            wobei die frage aufkäme, wenn ich in $_SESSION["spieler"] schon was drin hab, zb daten3, die jetzt aber in der abfrage nicht neu abgefragt werden, ob dann die daten verloren gehen, also ob ich dann erst das ergebnis zwisachenspeichern muss (auch schon wegen fehlercode) und dann $_SESSION["spieler"] einzeln in ner schleife um jedes element erweitern muss



                            wenn ihr versteht was ich meine ...
                            PHP-Code:
                            $erg getUser($_SESSION["spieler"]->ID"name, email, daten1");
                            if (
                            is_integer($erg) && $erg 0)
                              
                            fehler
                            else
                              foreach(
                            $erg as $k => $v)
                                 
                            $_SESSION["spieler"]->$k $v 

                            was meint ihr?
                            Zuletzt geändert von sEeb; 01.12.2003, 15:05.
                            verantwortlich für Elygor - Das kostenlose Browserspiel

                            Kommentar


                            • #15
                              Original geschrieben von sEeb
                              SELECT daten1, daten2 FROM x WHERE ID=$id AND changing=2 LIMIT 1
                              [...]
                              dass hiesse also, dass er nur dann die daten lädt, wenn bei nem benutzer den ich untersuche der changing flag gesetzt ist
                              ja

                              wenn du das für alle benutzer haben willst, bei denen sich was geändert hat, dann frag nicht auch ncoch die id ab
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X