2016-09-29 2 views
0

Ich habe eine Index_01, die eine Teilmenge von INDEX_02 istOverlapping Indizes oder Subset

CREATE NONCLUSTERED INDEX [Index01] ON [Tab1](
colA,colB,colC) 
INCLUDE (colD,colE,colF) 

CREATE NONCLUSTERED INDEX [Index02] ON [Tab1](
    colE, 
    colF, 
    colC, 
    colD, 
    colA, 
    colC) 
INCLUDE (colB,colZ) 

Da die Index01 ist die Teilmenge von Index02 können wir die Index01 löschen? Sind Index_01 und Index_02 gleich?

Vielen Dank im Voraus.

+1

Ist ein Telefonbuch nach Vorname, Nachname und Wohnort sortiert nach Beruf, Geburtsdatum, Maß, Wohnort, Nachname und Vorname? Die Daten sind da, aber die Verwendung ist radikal anders. –

+0

Beide Indizes funktionieren anders –

+1

Sie sind keine Untermenge, und arbeiten anders, würde ich vorschlagen, lesen Sie diese Frage, kann es Ihnen helfen. http://stackoverflow.com/questions/2292662/how-important-is-the-order-of-columns-in-indexes – EricZ

Antwort

0

SQL Server erstellt basierend auf den Spalten, die den Index definieren, einen B-Tree Plus. Index01 basiert auf den Spalten colA, colB und colC. Der B-Tree-Build für Index02 basiert auf colE, colF, colC, colD, colA, colCT.Sie sind sehr unterschiedliche Indizes.

Obwohl Index01 enthält colD, colE, colF bedeutet, dass, wenn eine Übereinstimmung basierend auf colA, colB, colC gefunden wird, wenn die Abfrage nur die Daten benötigt, die Spalten colD, colE, colF SQL Server nicht hat um weiter zu gehen und in die Daten zu gehen - es hat die Informationen im Index, die es dann zurückgeben kann.