Was ist effizienter?

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

  • Was ist effizienter?

    Ich habe extrem viele Spalten(mehr als 100) in verschiedenen Tabellen meines Skriptes,wo nur geprüft wird,ob die Funktion die damit verknüpft ist,auf "1" oder auf "0" gesetzt ist.
    Als Feldtyp habe ich da immer "tinyint(1)" genommen,weil es mir am effizientesten schien.Jetzt hab ich was von ENUM gelesen.Wäre das effizienter(also schneller)?Eine ENUM-Spalte,kann genau wie tinyint 1Byte Speicher kosten,aber auch 2.
    Also,was wäre schneller?(auch wenn es nur 0.000001 Sekunden wären,bei über 100 Spalten... )

  • #2
    Nachdem Du an die 100 Kennzeichen hast wäre es u.U. effizienter, wenn möglich - kommt ja auf das Datenkonzept und die Datenselbst drauf an - den Datentyp SET() zu verwenden.

    Ich finde keine Hinweise dafür, daß ENUM() zu TINYINT performanter wäre. Ich würde TINYINT verwenden.

    Du hast schon recht, daß Du Dir gedanken machst, denn gerade beim Datendesign kann man zu Beginn sehr viel an Performance rausholen. Mit wieviel DB-Einträgen rechnest Du mit Deiner Applikation? 10.000, 100.000, 1.000.000 oder mehr?

    Kommentar


    • #3
      Nicht lachen nach meiner Frage in dem anderen Thread (),aber das wird ein Forum... Ich hab schon jetzt 123 tinyints(1),die nur dazu dienen,Funtkionen zu aktivieren und deaktivieren... Das Probleme ist,dass da noch zwischen 70 und 100 dazukommen werden... Und gerade weil das soviele Abfragen auch werden,muss das alles von anfang an durchdacht sein...Wieviel Einträge das werden,hängt ja dann also auch von der größe des Forums ab...Keine Lust,dass wenn man dann mehr als 100000 Beiträge hat und 2000 User,wobei alle Funktionen aktiviert sind,an die 20 Sekunden Seitenladezeit hat,was ja dann auch leicht passieren kann.

      Hmm...SET ist doch dazu da,um mehrere Werte zu "wählen",wenn ich das richtig verstnaden habe.Also das gleiche wie ENUM,bloss das halt mehrere Werte aktiviert seien können.Aber das wäre doch wieder sinnlos,weil man ja nur zwischen "an" und "aus" ("1" und "0") wählen kann(bei einigen Sachen ist ENUM aber dann doch wieder wichtig,z.B. bei der art der Seitenkomprimierung[entweder gz_handler oder zlib.output_compression oder gar nichts]).Wäre SET denn dann dennoch schneller?

      [EDIT]
      Hmm...SET brauch man für das Beispiel mit der Komprimierung ja doch nicht,da man ja "0","1",oder "2" speichern kann und das hat jeweils den entsprechenden Wert...
      Zuletzt geändert von V 9 1 9 V; 29.07.2002, 09:53.

      Kommentar


      • #4
        Hi,

        wenn ich das richtig durchschaut habe, würde ein anderer Aufbau Deiner Daten mehr Effekt und weniger Aufwand bringen...
        Ich mach das mal an einem Beispiel fest - Du wolltest ja eigentlich nur FUNKTIONEN EIN- oder AUSschalten?! Mein Beispiel zeigt hier ein paar USER, die eine NEWSGROUP EIN- oder AUSschalten möchten...

        Benutzer:
        UserNr Name
        1 Kevin
        2 Linda
        3 Harald

        NewsGroup:
        1 PHP
        2 MySQL
        3 HTML
        4 CSS

        WerLiestWas:
        User NewsGroup
        1 1
        1 2
        2 1
        2 3
        2 4
        3 3
        3 4

        diese letzte Tabelle ist die entscheidende!!! Sie enthält einfach nur die Zuordnung einer UserNr auf eine Newsgroup...
        NewsGroup EIN - Eintrag ist das
        NewsGroup AUS - Eintrag wird aus der Tabelle gelöscht

        War es das, was Du wolltest...???

        Gruß Roland

        PS: hoffentlich ist die Liste da oben einigermaßen gut lesbar - hab das per cut&paste reingesetzt - ansonsten sorry... :-/

        Kommentar


        • #5
          Hmm...Ist das so einfach auf ein Forum umsetzbar?
          Wenn der Admin einstellen kann,ob er Smileys aktiviert,oder deaktiviert,dann kann ich mir nicht wirklich vorstellen,wie das nach deinem Beispiel funktionieren sollte...

          P.S.:
          Ist gut zu lesen.

          Kommentar


          • #6
            ...oh oh...


            auch noch vertippt...


            > NewsGroup EIN - Eintrag ist da!
            > NewsGroup AUS - Eintrag wird aus der Tabelle gelöscht!

            ...man kann diese Variante natürlich noch beliebig ergänzen und umbauen (weitere Felder)...

            Sie ist aber auch unheimlich leicht pflegbar:
            User kommen dazu... ...kein Problem!
            NewsGroups kommen dazu... ...kein Problem!

            ...man darf sich nur nicht erschrecken, daß die Liste sehr lang ist... ;-)

            Gruß Roland

            PS: Alle Tippfehler (C)2002 by RoVo

            Kommentar


            • #7
              NewsGroup:
              1 PHP
              2 MySQL
              3 HTML
              4 CSS

              WerLiestWas:
              NewsGroup SmileysAN
              1 True
              2 False
              3 False
              4 True

              Kommentar


              • #8
                UUPS!? ...wieder vertippt...

                ...wie bekomm ich eine Liste sauber in meine Mail...???

                PS: streiche die Zeile: WERLIESTWAS

                Kommentar


                • #9
                  Hmm...

                  Ich geh mal davon aus,dass du mit NewsGroups jeweils einzelne Foren meinst.Der Weg wäre für ein Forum aber ineffizient.
                  Der Admin kann für jedes Forum einzeln einstellen,ob Smileys an sieht oder nicht.Und das wird alles in der gleichen Table gespeichert,wie auch der Forumname,etc.(obwohl ich derzeit einen anderen Weg eventuell in Erwägung ziehe,der ähnlich,wenn nicht sogar genau wie deiner ist...)

                  Ich geb dir mal ein anderes Beispiel:
                  Der Admin kann die "Wer ist online?" Liste an und austellen.Dabei wird der Wert in der DB halt immer auf "1" oder "0" gestellt...Was würde dein System da für einen Vorteil bringen,wenn das überhaupt möglich ist?

                  [EDIT]
                  RoVo,es gibt eine Edit Funktion!
                  Eine Liste kannst du erstellen,indem du auf den "Liste" Button drückst
                  Zuletzt geändert von V 9 1 9 V; 29.07.2002, 10:53.

                  Kommentar


                  • #10
                    ...auf Deine Frage bezogen, könnte man auch Folgendes machen...

                    Forum:
                    1 PHP
                    2 MySQL
                    3 HTML
                    4 CSS

                    Forum Kennung Flag
                    1 SmileysAN True
                    1 ListeSichtbar False
                    2 SmileysAN False
                    2 ListeSichtbar True
                    3 SmileysAN True
                    3 ListeSichtbar False
                    4 SmileysAN False
                    4 ListeSichtbar True

                    Vorteile:
                    - leicht erweiterbar
                    - wenig Code nötig

                    Gruß Roland

                    Kommentar


                    • #11
                      Also,ich denke mal,dass deine Methode absolut nichts bringt.
                      Hier einfach mal ein Beispiel,wie die Table für ein Board im Forum aussieht:

                      ----

                      Table Name: boards

                      boardid int NOT NULL,
                      boardname varchar(100) NOT NULL,
                      boarddescription varchar(255) NOT NULL,
                      smilies int NOT NULL,
                      onlinelist int NOT NULL

                      ----

                      Wenn im Feld smilies der Wert auf "1" gesetzt ist,sind Smilies erlaubt,wenn es auf "0" ist,ist es ausgeschaltet.Genau das gleiche mit der "Wer ist in dem Board online?"-Liste.Bei deiner Methode bräuchte man 1. eine 2 Tabelle und 2. einen query mehr.
                      Hier wird einfach viá if($boards[smilies]=="1") { parsesmilies($message); } else { } geprüft,ob Smileys in einem Beitrag geparsed werden sollen oder nicht und da braucht man auch keinen 2. Query,weil man ja gleicht mit dem 1. Query,alles in einen Array holt.Deswegen seh ich meine Version als "effizienter" an.Und wegen der Handhabung: Mir ist es vollkommen egal,wie schwer es für mich ist,den Code zu schreiben oder was hinzuzufügen,hauptsache die Geschwindigkeit stimmt!

                      Kommentar


                      • #12
                        Hi,

                        es war nur ein Ansatz, Dir viele Felder in EINER Tabelle zu ersparen...

                        Ich kann das von hier schlecht einschätzen, wie sich das in Dein Projekt einbinden läßt und wie effizient es dann ist...

                        Gruß Roland

                        Kommentar


                        • #13
                          Hat es denn einen Vorteil,viele Felder in einer Tabelle zu sparen,bzw. auf mehrere zu Verteilen?
                          Ich mach das schon so mit den meisten Funktionen die man an- und ausschalten kann,also die eine Tabelle heisst options_threads,die andere options_boards,usw.
                          Da seh ich das noch als effizient an,weil man ja nicht für jedes Board,immer wieder die gleichen Einstellungen schreiben kann,die ja eigentlich immer alle gleich sind.

                          Kommentar


                          • #14
                            Hi,

                            ich hab mal auf die Schnelle ein Beispiel gebastelt...

                            SELECT boards.boardid AS boards_boardid, boards.boardname, boards.boarddescription, boardflags.boardid AS boardflags_boardid, boardflags.kennung, boardflags.flag
                            FROM boards INNER JOIN boardflags ON boards.boardid = boardflags.boardid

                            ...also kein weiterer Query und schnell ist das allemal...

                            Gruß Roland

                            Kommentar


                            • #15
                              Hmmm...jo,stimmt
                              Aber soweit ich das einschätze,wäre der Code immernoch langsamer,und wenn es auch nur 0.001 Sekunden sind...
                              Wird ja halt immernoch eine 2. Table einbezogen...
                              Ich teste es bei Gelegenheit mal,bin mal gespannt...

                              Kommentar

                              Lädt...
                              X