2009-04-12 12 views

Antwort

0

Die "Notwendigkeit" besteht darin, schnellere Nachschlagevorgänge für Spalten durchzuführen, die nicht im Clustered-Index enthalten sind.

2

Für eine optimale Leistung müssen Sie für jede in Ihren Abfragen verwendete Kombination einen Index erstellen. Zum Beispiel, wenn Sie eine solche Auswahl haben.

SELECT * 
FROM MyTable 
WHERE Col_1 = @SomeValue AND 
     Col_2 = @SomeOtherValue 

Dann sollten Sie einen Clustered-Index mit Col_1 und Col_2 tun. Auf der anderen Seite, wenn Sie eine zusätzliche Abfrage, die eine der Säule nach oben sieht nur aus wie:

SELECT * 
FROM MyTable 
WHERE Col_1 = @SomeValue 

Dann sollten Sie einen Index nur mit dem col_1 haben. Sie haben also zwei Indizes. Eins mit Col_1 und Col_2 und ein anderes mit Col_1.

+0

Keine Notwendigkeit für zwei Indizes in diesem Fall - genug, um Index für Col_1 und Col_2 zu haben. Derselbe Index wird auch effektiv für Lookup-Col_1-Werte verwendet. – Arvo

0

Erhalten Sie keine Clustered-Indizes, die mit Indizes mehrerer Spalten verwechselt werden. Das ist nicht dasselbe.

Here's ein Artikel, der einen guten Job der Erklärung von geclusterten vs. nicht gruppierten Indizes leistet.

In mssql-Server können Sie nur einen gruppierten Index pro Tabelle haben, und es ist fast immer der Primärschlüssel. Ein gruppierter Index wird an die Tabelle "angehängt", so dass er nicht in die Tabelle zurückkehren muss, um andere Datenelemente zu erhalten, die möglicherweise in der "select" -Klausel enthalten sind. Ein nicht gruppierter Index ist nicht angefügt, enthält jedoch einen Verweis auf die Tabellenzeile mit dem gesamten Rest der Daten.