Erik: User-IDs intern als Zahlen oder als Zeichenketten?

Hi,
ich habe mich jetzt entschlossen bei meinem "Projekt" User-IDs als Zeichenketten (VARCHAR-Spalten) zu deklarieren. Jetzt meine Frage: haltet ihr es für sinnvoll intern weiterhin die User-ID als Zahl  zu verstehen? Also in der Tabelle mit den User-Daten wird anhand dem User-Namen eine User-Nummer zugewiesen, die dann als Erkennungsmerkmal in allen anderen Tabellen gilt. Die Alternative wäre überall mit dem User-Namen zu arbeiten. An sich sollte es doch schneller (und ein bisschen platzsparender) sein mit Zahlen zu arbeiten oder spielt das bei Spalten mit Index sowieso kaum eine Rolle?
Viele Grüße
Erik

  1. ich habe mich jetzt entschlossen bei meinem "Projekt" User-IDs als Zeichenketten (VARCHAR-Spalten) zu deklarieren. Jetzt meine Frage: haltet ihr es für sinnvoll intern weiterhin die User-ID als Zahl  zu verstehen?

    An sich sollte es doch schneller (und ein bisschen platzsparender) sein mit Zahlen zu arbeiten oder spielt das bei Spalten mit Index sowieso kaum eine Rolle?

    Das kommt auf die Größe der Tabellen an. Grundsätzlich kannst du aber davon ausgehen, daß ein Computer mit Zahlen x-mal besser umgehen kann als mit Zeichenketten - schlicht und ergreifend, weil eine Zahl immer eine feste Größe hat (1, 2, 4, 8 Byte), die sich mit einem Befehl vergleichen lässt, und weil eine Zahl pro Byte mehr Informationen aufnehmen kann als eine Zeichenkette, also weniger zu vergleichen ist.

    Aber ich möchte mal so behaupten, daß, falls dein Projekt nicht gerade web.de oder eBay heißt, die Wahl letztenendes wurscht ist. Nimm das, was dir am handlichsten vorkommt.
    Und wenn du 20.000 Nutzer hast, kannst du ja mal einen Geschwindigkeitsvergleich machen und dich wieder melden :)

    Gruß,
      soenk.e

  2. Hi Erik,

    An sich sollte es doch schneller (und ein bisschen platzsparender)
    sein mit Zahlen zu arbeiten

    Das kommt darauf an. Wenn Du ständig zwischen string und integer konvertieren mußt, dann kostet das auch etwas.

    oder spielt das bei Spalten mit Index sowieso kaum eine Rolle?

    Auch bei Spalten mit Index lohnt es sich, die kompaktestmögliche Darstellung zu verwenden.

    Indexzugriffe machst Du doch, um Tempo zu gewinnen - wenn Du dann aber 8 Zeichen String vergleichen mußt, obwohl 4 Zeichen Integer auch reichen würde, bremst Du Dich selbst aus. Denn die Umwandlung machst Du pro Zugriff nur einmal - Vergleiche können es einige dutzend oder auch ein paar hundert sein (je nachdem, wie gut projezierend Dein Index ist).

    Bei einem full table scan mit vielen tausend Zugriffen wäre die Einsparung zwar noch größer, aber dann wäre das Design ohnehin neu zu überdenken. ;-)

    Viele Grüße
          Michael