int oder nvarchar als primärschlüssel?

09/12/2009 - 22:16 von Martin | Report spam
hallo!
kann vielleicht jemand sagen, ob und was für einen unterschied es macht (in
bezug auf größe und geschwindigkeit), wenn ein int als primàrschlüssel
eingesetzt wird mit einer UNIQUE beschrànkung auf die nvarchar(50)-spalte
oder wenn diese direkt als primàrschlüssel festgelegt wird?
wenn die dann als fremdschlüssel in anderen tabellen verwendet wird, wie
wird das intern verarbeitet? mit anderen worten: ist der speicherbedarf
größer?

danke für eine antwort,

Martin
 

Lesen sie die antworten

#1 Elmar Boye
09/12/2009 - 23:18 | Warnen spam
Hallo Martin,

"Martin" schrieb ...
kann vielleicht jemand sagen, ob und was für einen unterschied es macht (in
bezug auf größe und geschwindigkeit), wenn ein int als primàrschlüssel
eingesetzt wird mit einer UNIQUE beschrànkung auf die nvarchar(50)-spalte
oder wenn diese direkt als primàrschlüssel festgelegt wird?



Grundsàtzlich gilt für Indizes (und somit Primàr- wie Unique Einschrànkungen)
dass je kleiner der gewàhlte Datentyp ist, um so schmaler der Index ausfàllt
und umso schneller kann er durchsucht werden.
Hinzukommt, das für Integer diverse interne Optimierungen existieren
und eine Unicode-Spalte für jedes (genutzte) Zeichen zwei Bytes belegt.

wenn die dann als fremdschlüssel in anderen tabellen verwendet wird, wie
wird das intern verarbeitet?



Es wird auf die Spalte zugegriffen, die Du für den Fremdschlüssel angibst.
Soweit keine weiteren Daten benötigt werden, erfolgt der Zugriff
ausschliesslich über den Index.
Beachte das beim Clustered Index (welchen auch immer Du wàhlst)
die Daten zugleich im Index enthalten sind.

mit anderen worten: ist der speicherbedarf größer?



Nicht nur der interne Speicherbedarf. Hinzu kommt das mehr auf die
(in der Regel sehr viel langsameren) Festplatten zugegriffen werden muß.

Mehr siehe "Architektur von Tabellen- und Indexdatenstrukturen"
http://msdn.microsoft.com/de-de/lib...80978.aspx

Gruß Elmar

Ähnliche fragen