Datentyp - Zahlen oder Zeichen
Stefen
- datenbank
hi,
ich habe bei 1000 datensätzen ein spalte. Diese Spalte ist nur dazu da, das mein programm ob etwas aktiviert ist.
und ich weis jetzt nicth was besser für die performance ist.
die zahl "0" für aus und die zahl "1" für an
oder
die das wort "off" für aus und das wort "on" für an
also jetzt könnte ich den datentyp "int" oder "varchar".
welcher wäre jetzt besser.
ich hoffe ihr versteht was ich meine.
danke im voraus
Hallo,
also ich persönlich nutze dafür int mit einer Stelle, wo 1 oder 0 drin steht - ich denke das ist auch recht üblich so...
cu Benedikt Loepp
Hallo,
also ich persönlich nutze dafür int mit einer Stelle, wo 1 oder 0 drin steht - ich denke das ist auch recht üblich so...
aha und welchen typ soll ich dann nehmen?
TINYINT oder INT(1)
TINYINT oder INT(1)
INT(1), da TINYINT 1 Byte, also 8 Bit lang ist und somit nur Platzverschwendung wäre! ;-)
Schönen Abend,
GE.ORG
Vielen Dank für eure Antworten
die zahl "0" für aus und die zahl "1" für an
oder
die das wort "off" für aus und das wort "on" für analso jetzt könnte ich den datentyp "int" oder "varchar".
welcher wäre jetzt besser.
Ich würde 1=on, 0=off vorschlagen, da der Binär-Modus "logischer" ist, 1=true/0=false ...
Greetingz,
menphrad
Hallo Stefen,
und ich weis jetzt nicth was besser für die performance ist.
die zahl "0" für aus und die zahl "1" für an
oder
die das wort "off" für aus und das wort "on" für analso jetzt könnte ich den datentyp "int" oder "varchar".
welcher wäre jetzt besser.
Der Datentyp int wird schneller verarbeitet. Da ein varchar eine Zeichenkette mit Variabler länge ist muß des Programm intern immer noch die länge der Variable speichern und intern mit Verarbeiten. Ein int hat eine feste länge von meistens 16-Bit oder 2 Byte da ist der zugriff schneller weil die Verwaltung der länge wegfällt. Auch für eine spätere Prüfung des Inhalts mit einer if Abfrage müssten für off 3 Byte geprüft werden und bei einem int nur 2 Byte beim on wäre es gleich. Mit Unicode sieht das ganze bei char noch ungünstiger aus.
Viele Grüße aus Bad Aibling (Bayern nähe München)
ALexander
P.S.: Der Zeitunterschied bewegt sich bei Modernen Rechner aber bei höchstens ca. 1 ms. Somit ist das für die Performens nur bei Schleifen mit einer sehr hohen Anzahl von durchläufen relevant.
hi,
ich habe bei 1000 datensätzen ein spalte. Diese Spalte ist nur dazu da, das mein programm ob etwas aktiviert ist.
und ich weis jetzt nicth was besser für die performance ist.
die zahl "0" für aus und die zahl "1" für an
oder
die das wort "off" für aus und das wort "on" für an
klingt für mich nach einem musterbeispiel für die verwendung von ENUM, http://www.mysql.de/doc/de/ENUM.html.
gruss,
wahsaga
Hi,
ich habe bei 1000 datensätzen ein spalte. Diese Spalte ist nur dazu da, das mein programm ob etwas aktiviert ist.
und ich weis jetzt nicth was besser für die performance ist.
die zahl "0" für aus und die zahl "1" für an
oder
die das wort "off" für aus und das wort "on" für an
klingt für mich nach einem musterbeispiel für die verwendung von ENUM, http://www.mysql.de/doc/de/ENUM.html.
Ausgehend von der Frage nach der besseren Performance, int ist schneller ENUM ist eleganter, verursacht aber mit interner Verwaltung in der Datenbank höhere Laufzeiten.
Viele Grüsse
Alexander
hi,
Ausgehend von der Frage nach der besseren Performance, int ist schneller ENUM ist eleganter, verursacht aber mit interner Verwaltung in der Datenbank höhere Laufzeiten.
die würde ich aber für minimal halten.
intern speichert die DB dafür auch nur einen integer-wert, der in der ausgabe halt in ein zeichen oder wort umgewandelt wird.
gruss,
wahsaga
Hi,
die würde ich aber für minimal halten.
intern speichert die DB dafür auch nur einen integer-wert, der in der ausgabe halt in ein zeichen oder wort umgewandelt wird.
Da hast Du in diesem Fall recht aber wenn der ENUM mehr als zwei möglichkeiten hat nimmt auch der aufwand zu. Ein ENUM ist ja genau genommen eine Liste von möglichkeiten und je länger diese Liste um so länger die Umwandlungszeit. Je nach Realisierung der Anwendung ist die Diskusion der Laufzeit in der Datenbank eher akademischer Natur. Wenn man nämlich PHP oder Perl bzw irgend eine Scriptsprache einsetzt sind die Zeitverluster dort so groß das man sich um ein paar Millisekunden innerhalb der Datenbank nicht mehr große gedanken machen muß.
Viele Grüße
Alexander
hi,
Da hast Du in diesem Fall recht aber wenn der ENUM mehr als zwei möglichkeiten hat nimmt auch der aufwand zu. Ein ENUM ist ja genau genommen eine Liste von möglichkeiten und je länger diese Liste um so länger die Umwandlungszeit.
in der DB wird AFAIK auch für ENUM-werte lediglich ein nummerischer index benutzt.
wenn du also z.b. mit WHERE ein feld auf einen ENUM-wert abfragen willst, wird die DB die umsetzung ENUM-wert -> nummerischer index einmal vor der ausführung der query durchführen, aufwand absolut minimal.
in der ergbnismenge braucht lediglich nach der abfrage wieder die umsetzung nummerischer index -> ENUM-wert gemacht zu werden, ebenfalls trivial.
gruss,
wahsaga
Hi wahsaga,
in der DB wird AFAIK auch für ENUM-werte lediglich ein nummerischer index benutzt.
wenn du also z.b. mit WHERE ein feld auf einen ENUM-wert abfragen willst, wird die DB die umsetzung ENUM-wert -> nummerischer index einmal vor der ausführung der query durchführen, aufwand absolut minimal.
in der ergbnismenge braucht lediglich nach der abfrage wieder die umsetzung nummerischer index -> ENUM-wert gemacht zu werden, ebenfalls trivial.
ich habe auch nicht gesagt daß der Aufwand groß ist nur das er größer ist und je mehr Werte ein ENUM hat immer größer wir. Das wird sich aber wie ich es hier schon öfter erwähnte nur um einige Nano bzw. Millisekunden handeln. Die man meist vernachlässigen kann.
Viele Grüße (aus ... Du weißt ja schon)
Alexander