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 😃
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).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Mein Tip,