2010-10-09 12 views
5

SQL Server 2005 include la funzionalità "indice di copertura" che consente di selezionare più di una colonna non chiave da includere nell'indice non cluster esistente.Qual è la differenza tra l'indice composito senza cluster e l'indice di copertura

Ad esempio, ho le seguenti colonne:

EmployeeID, DepartmentID, DesignationID, BranchID 

Ecco due scenari:

  • EmployeeID è una chiave primaria con indice cluster e le restanti colonne (DepartmentID, DesignationID , BranchID) sono considerati come indici non raggruppati (indice composito).

  • EmployeeID è una chiave primaria con indice cluster e DepartmentID è non indice cluster con DesignationID, BranchID sono "inclusi colonne" per indice non cluster.

Qual è la differenza tra i due precedenti? Se entrambi sono uguali, cosa c'è di nuovo per introdurre il concetto di "Covering Index"?

+0

Eventuali duplicati con http://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index –

risposta

3

La differenza è che se ci sono due righe con lo stesso DepartmentID nel primo indice, verranno ordinate in base ai rispettivi valori di DesignationID e BranchID. Nel secondo caso, non saranno ordinati l'uno rispetto all'altro e potrebbero apparire in qualsiasi ordine nell'indice.

In termini di ciò che questo significa per l'applicazione:

  • Un'interrogazione che può utilizzare un indice su (DepartmentID, DesignationID) può essere più efficiente con la prima query rispetto al secondo.
  • La creazione del primo indice potrebbe richiedere un po 'più tempo a causa dell'ordinamento aggiuntivo richiesto.
0

indice coperto è un indice non cluster con CONTENERE clausola