2010-12-06 6 views

Antwort

19
create table test (Id int identity) 
go 
sp_help test 

 
The object 'test' does not have any indexes, or you do not have permissions. 

No constraints are defined on object 'test', or you do not have permissions. 

Als allgemeine Praxis Sie einen eindeutigen Index für Ihre Identität Spalte erzeugen würde, beschleunigt diese Lookups auf.

Normalerweise möchten Sie, dass Ihre Identitätsspalten auch gruppierte Indizes sind (Id int identity primary key ist die Verknüpfungsnotation), was bedeutet, dass die Tabelle auf der Festplatte in derselben Reihenfolge wie Ihre Identitätsspalte liegt. Dies optimiert für Einfügungen, da die einzufügende Seite sich tendenziell im Speicher befindet. In einigen Fällen können Sie, wenn Sie häufig auf andere Daten in der Tabelle Fernsuchen durchführen, stattdessen andere Spalten gruppieren, da SQL Server nur einen gruppierten Index pro Tabelle zulässt.

+1

+1 - Ich mag die Codierung Ansatz :) – Oded

2

Standardmäßig werden Ihre Primärschlüsselspalten in einen Clustered-Index umgewandelt. Dies ist ein spezieller Index, der nicht von den Daten getrennt ist. Stattdessen werden die Daten in der Tabelle nach diesen Indexwerten sortiert.

Ich sage 'standardmäßig', weil Sie den gruppierten Index zu einem anderen Feld ändern können, wenn Sie wollten. Wenn Sie einen guten Identitätswert für Ihren Primärschlüssel gewählt haben, werden Sie dies fast nie ändern wollen.

+1

und wo ist die Beziehung zur Spalte IDENTITY in Ihrer Antwort? –

+1

Wie andere in ihren Antworten darauf hingewiesen haben, haben Identitätsspalten nichts direkt mit dem gruppierten Index (oder irgendeiner anderen Art von Index) zu tun. Ich denke, er verwechselt die Identität mit dem Primärschlüssel, also erklärte ich, was es bedeutet, dass * automatisch * standardmäßig als geclusterter Index endet. –

10

Wenn Sie eine Spalte mit einer PRIMARY KEY-Einschränkung erstellen, wird standardmäßig ein Clustered-Index erstellt (vorausgesetzt, es handelt sich um eine neue Tabelle, und ein solcher Index ist nicht bereits definiert).

Ein IDENTITY Feld hat damit nichts zu tun.

Also, um Ihre Frage zu beantworten - wenn Sie mit diesem Feld abfragen/sortieren und es kein Primärschlüssel ist, sollten Sie einen Index dafür definieren (Faustregel, immer für Ihr Szenario testen).

Verwandte Themen