2010-11-25 15 views

Antwort

1

Sie können haben Definieren Sie einen Primärschlüsselindex als NONCLUSTERED, um zu verhindern, dass die Tabellenzeilen gemäß dem Primärschlüssel sortiert werden. Sie können jedoch keinen Primärschlüssel ohne einen zugeordneten Index definieren.

+0

Sie können einen Primärschlüssel ohne jeden Index definieren, aber nicht wirklich empfohlen –

+0

@Mitch Wheat - Hmm ... Ich war mir dessen nicht bewusst. Können Sie eine Beispielanweisung posten, die eine PK-Einschränkung erstellt, aber nicht implizit auch einen Index erstellt? –

+1

@Mitch Wheat - Ich bin ziemlich sicher, dass Sie nicht können. Mit den Indexstrukturen überprüft/pflegt SQL Server die Eindeutigkeitseigenschaft. –

0

Die Mittel, mit denen SQL Server primäre und eindeutige Schlüssel implementiert, sind, indem Sie einen Index für diese Spalten platzieren. Sie können also keinen Primärschlüssel (oder eine eindeutige Einschränkung) ohne einen Index haben.

Sie können SQL Server anweisen, einen Nonclustered-Index zu verwenden, um diese Indizes zu implementieren. Wenn für eine Tabelle nur Nonclustered-Indizes vorhanden sind (oder gar keine Indizes), haben Sie einen Heap. Es ist ziemlich selten, dass Sie das wirklich wollen.

Nur weil eine Tabelle, die einen Clustered-Index hat, dies in keiner Weise bedeutet, dass die Zeilen der Tabelle werden in der „Ordnung“ durch einen solchen Index definiert zurückgegeben werden - die Tatsache, dass die Zeilen sind in der Regel, dass zurückgegeben Ordnung ist eine Implementierungseigenschaft.


Und der eigentliche Code wäre:

CREATE TABLE T (
    Column1 char(1) not null, 
    Column2 char(1) not null, 
    Column3 char(1) not null, 
    constraint PK_T PRIMARY KEY NONCLUSTERED (Column2,Column3) 
) 
1

Tische sind immer unsortiert - es gibt keine „Standard“, um für einen Tisch und der Optimierer kann wählen oder nicht, einen Index, wenn man verwenden, existiert.

In SQL Server ist ein Index effektiv die einzige Möglichkeit, einen Schlüssel zu implementieren. Sie haben die Wahl zwischen geclusterten oder nicht gruppierten Indizes - das ist alles.

0

Was bedeutet "Ich möchte nicht, dass alle meine Tabellen sortiert werden"? Wenn das bedeutet, dass die Zeilen in der Reihenfolge angezeigt werden sollen, in der sie eingegeben wurden, gibt es nur eine Möglichkeit, dies zu gewährleisten: Sie müssen ein Feld haben, in dem die Bestellung gespeichert ist (oder die Zeit, wenn Sie nicht viele Transaktionen haben) . Und in diesem Fall sollten Sie einen Clustered-Index für dieses Feld für die beste Leistung haben.
Sie könnten mit einer nicht gruppierten PK (wie der productId) UND einem geclusterten eindeutigen Index in Ihrem Feld autonumber_or_timestamp für maximale Leistung enden.
Aber das hängt wirklich von der Realität ab, die Sie versuchen zu modellieren, und Ihre Frage enthält zu wenig Information darüber. DB Design ist kein abstraktes Denken.

Verwandte Themen