...welche der beiden Zellentypen bringt die bessere Performance bzw. ist speicherintensiver? Ist es nur, das man bei ENUM keine > oder < -Abfragen stellen kann, oder gibt es weitere Nachteile von ENUM?
TINYINT oder ENUM
Einklappen
X
-
Wenn es nur um Ja / Nein geht nehm TinyINT(1)
Wenn Du alphanum werte hast gehts natürlich nur mit enum
ENUM ist ein zeichenketten objekt mit begrenzter Gültigkeit , hat also mehr speicherbedarf als ein 8bit integerwertchansel0049
----------------------------------------------------
if you've reached the bottomline - dig further!
Übersetzer gesucht? http://www.babelport.com
Kommentar
-
Original geschrieben von chansel0049
Wenn es nur um Ja / Nein geht nehm TinyINT(1)
Wenn Du alphanum werte hast gehts natürlich nur mit enum
ENUM ist ein zeichenketten objekt mit begrenzter Gültigkeit , hat also mehr speicherbedarf als ein 8bit integerwert
Ja/Nein ... auf jeden Fall ENUM() ... TINYINT ermöglicht schliesslich 255 Werte ... und nicht 2 ... !
Alphanum haben letztlich erstmal gar nichts in ENUMS zu suchen (in TINYINT natürlich auch nicht) sondern in CHAR oder VARCHAR ...
ENUM ist intern keine Zeichenkette ... diese steht nur in der Tabellenbeschreibung ... intern wird's als 1 bzw. 2 Byte Integer verwaltet ... zur Info.
Ausschlaggebend wären für mich in diesem Falle schlichtweg die Useability ... und die Lesbarkeit von Code und Datenbank ... siehe Punkt 1 (Ja/Nein) ... !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
-
Da meine Werte eh immer in eine Zahl übersetzt werden ist es brauch ich ENUM nicht aufgrund der möglichen alphanummerischen Möglichkeiten.
Hab mich generell für ENUM entschieden, da dieser Datentyp ja anscheinend für festgelegte Werte geeignet ist. Ausser bei Variablen vo trotz festgelegter Werte eine > oder < Abfrage Sinn macht. Denke mal da ist die Performance besser (ohne es getestet zu haben). Von der Speicherintensität scheint sich da übrigens nix zu tun.
Kommentar
-
Nu schaue mal guck!
Da les ich doch gleich mal nach!chansel0049
----------------------------------------------------
if you've reached the bottomline - dig further!
Übersetzer gesucht? http://www.babelport.com
Kommentar
-
Wo wir gerade bei Ja/Nein Feldern und Tinyint() sind, mir ist da was sehr
komisches aufgefallen!
Und zwar habe ich in einer Tablle ein Feld mit:
nr1 = tinyint(4)
nr2 = tinyint(1)
Jetzt habe ich mal versucht, welches die größte Zahl ist, die ich in den
beiden Feldern speichern kann. Was schätzt ihr denn, was das Ergebnis
war?!
In BEIDEN FELDERN 127!
Das versteh ich absolut nicht! Was gibt denn die (4) an? Vier Stellen einer
Zahl (also max. 9999) wie beim String? Kann nicht sein! Aber vier Bytes
können es auch nicht sein. Aufgefallen ist mir, das die 127 genau dem
Ergebnis entspricht, wenn man die Zahlen 2^0 bis 2^6 zusammenzählt.
(1 + 2 + 4 + 8 + 16 + 32 + 64 = 127) Hat das damit etwas zu tun?
PS: MySQL5, verwaltung mit PHPmyAdminGLORIA PERPETUA
Kommentar
-
Original geschrieben von deklarmart
Was schätzt ihr denn, was das Ergebnis
war?!
In BEIDEN FELDERN 127!
Das versteh ich absolut nicht! Was gibt denn die (4) an?I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
OK, die sagen "M zeigt die maximale Anzeigebreite an." Und was heißt das jetzt?
Wenn Tinyint immer max. 255 speichern kann, egal ob ich (1) oder (4) nehme,
worin unterscheidt sich das Feld dann? Wo genau sehe ich einen Unterschied?!
Ich habe das immer so verstanden, das M genau wie bei Varchar(30)
die max. speicherbare Länge auf 30 Bytes festlegt...
GLORIA PERPETUA
Kommentar
-
Da wird's noch mal deutlicher beschrieben: http://dev.mysql.com/doc/refman/4.1/...ric-types.htmlI don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
OK, danke, die Bedeutung habe ich nun verstanden. Aber denn Sinn nicht!
Diese optionale Angabe der Anzeigebreite wird verwendet, um die Anzeige von Werten, die eine geringere als die für die Spalte festgelegte Breite aufweisen, nach links mit Leerzeichen aufzufüllen.
und nicht in irgendeiner Anzeige mit Leerzeichen gefüllt werden! OK, MySQL
entfernt die Leerzeichen anscheinend bei der Abfrage, aber wozu werden
die dann überhaupt eingefügt? Ich stell mich mal ganz dumm: "in der Anzeige
von PHPmyAdmin sehe ich keine Leerzeichen bei INT Zahlen!" Auf was
für eine Anzeige bezieht sich das also?GLORIA PERPETUA
Kommentar
-
Selbst wenn das mit den Leerzeichen nicht so einleuchtend sein sollte - bzgl. ZEROFILL sollte es das doch aber sein?
Btw, in diesem Zusammehang: Vielleicht könntest du dir mal angewöhnen, von verlinkten Dokumenten etwas mehr als nur die Einleitung und erste Absätze zu lesen, ja? Danke.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Nur zu Anmerkung, man kann auch mit enum numerische Werte speichern/lesen:
enum('nein','ja')
Code:SELECT enum_spalte+0 FROM tab1 //ergibt z.B. 'nein' INSERT INTO tab1 SET enum_spalte = 1 //ist das gleiche wie: INSERT INTO tab1 SET enum_spalte = 'ja'
Kommentar
Kommentar