3 Stimmen

Schadet eine Tabelle mit varchar(255) PRIMARY KEY etwas?

Ich weiß, dass es keine gute Idee ist, aber ich möchte sicherstellen, dass dies nicht zu einem Absturz des Servers führt.

CREATE TABLE [dbo].[Items](
    [Id] [nvarchar](255) NOT NULL PRIMARY KEY,
    [Value] [nvarchar](max) NOT NULL,
)

Es wäre interessant zu wissen, wie sich ein solcher Schlüssel im Vergleich zu einem [int]-Schlüssel verhält, aber die Bestätigung, dass dies nicht schadet, ist ausreichend.

5voto

OMG Ponies Punkte 312816

Können Sie VARCHAR(#) als Primärschlüssel verwenden?

Oui.
Von die Dokumentation , a VARCHAR(255) benötigt für diese Spalte 257 (255+2) Bytes aufwärts (je nach Länge der tatsächlichen Daten) -- pro Zeile .

Es wäre interessant zu erfahren, wie sich ein solcher Schlüssel im Vergleich zu einem INT Schlüssel

INT benötigt 4 Bytes, nach der Dokumentation . Je nach Ihren Daten gibt es numerische Datentypen, die weniger Platz benötigen:

  • SMALLINT : 2 Bytes
  • TINYINT : 1 Byte

Je geringer die Anzahl der Bytes ist, desto schneller ist der Zugriff auf die Daten in der Spalte. Das gilt auch für JOINs. Außerdem wird die Datenbank (und die Backups) kleiner.

Ich würde die Notwendigkeit einer solch großen VARCHAR als Primärschlüssel - GUIDs sind nicht einmal so lang.

1voto

Justin Pihony Punkte 63852

Nein, Sie können einen Primärschlüssel für fast jeden SQL-Typ erstellen. SQL lässt dies nicht zu, wenn es den Server zum Absturz bringen würde. Wie Sie bereits erwähnt haben, ist dies jedoch nicht gut für den Speicher und die Leistung des Servers.

In der Tat, hier ist die SO antworten zum Leistungsteil dieser Frage.

0voto

hkf Punkte 4412

Dies führt zwar zu einem Leistungsmehraufwand, lässt den Server aber nicht "abstürzen".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X