Laden...

MSSQL Perfomance Frage Index

Erstellt von akunz vor 11 Jahren Letzter Beitrag vor 11 Jahren 676 Views
akunz Themenstarter:in
173 Beiträge seit 2009
vor 11 Jahren
MSSQL Perfomance Frage Index

verwendetes Datenbanksystem: MSSQL Server 2008 Express

Hi,

ich habe folgende Frage.
Ich benötige eine Tabelle die folgendermaßen aussieht:

ID1 varchar(10),
ID2 varchar(10),
typ int
...

In diese Tabelle werden sehr viele Datensätze eingefügt und wieder entfernt.
Select Statements gehen fast ausschließlich auf ID2, also zum Beispiel Select * from ... where ID2 = 'xxx'.
Dabei wird immer = verwendet, nicht like oder sowas.
Die IDs können dabei doppelt vorkommen, also ID2 und ID1.
Die Kombination aus ID1 und ID2 ist immer eindeutig.

Jetzt ist meine Frage wie ich das index- und primärschlüsselmäßig organisiere.
Bin ziemlich neu auf dem Gebiet und bereit was zu lernen 😃

16.833 Beiträge seit 2008
vor 11 Jahren

Das kommt nun drauf an, was Du insgesamt machen willst.

ID1 und ID2 kann "problemlos" als zusammengefasster Schlüssel über beide Spalten verwirklicht werden. Wenn diese Tabelle jedoch noch von anderen Tabellen verwendet wird (Relations und dahingehend Joins) dann solltest Du lieber ein extra ID Feld anlegen, auf dem der Primärschlüssel liegt. Index auch, sofern diese ID auch wo anders benötigt wird. Sonst auf ID2.

Prinzipiell sollte ein einzerlner varchar-Key performanter sein als ein einzelner Int-Key (jedenfalls les ich das hin und wieder in Blogs), aber bei joins dürfte das evtl anders sein, vor allem wenn der Key aus zwei Spalten besteht (daher der Ratschlag, den ich oben genannt hab).

476 Beiträge seit 2004
vor 11 Jahren

Hallo akunz,

ich bin ein Fan davon den Primärschlüssel nicht aus den Daten der Tabelle abzuleiten sondern einen Surrogte Key dafür zu verwenden und diesen über Autoincrement hochzuzählen.

Da du schreibst dass du ausschließlioch nach dem Feld ID2 selektierst, würde ich hierfür einen Clustered Index anlegen (... und den vom Primärschlüssel unclustered).

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

T
94 Beiträge seit 2007
vor 11 Jahren

Mein Tip,

  • neue Spalte ID (int, autoincrement) als Primärschlüssel; da viele Daten eingefügt werden sollen, wäre eine Spalte vom Typ uniqueidentifier nicht so günstig wegen Fragmentierung
  • unique Index auf ID1 und ID2
  • Index auf ID2
akunz Themenstarter:in
173 Beiträge seit 2009
vor 11 Jahren

Hi und danke,

ich werde die Sachen so implementieren.