Domanda

Quali sono le differenze tra un clustered e un non-clustered index?

È stato utile?

Soluzione

Indice Cluster

  • Solo uno per ogni tabella
  • Veloce da leggere che non cluster come i dati vengono memorizzati fisicamente in ordine di indice

Non Clustered Index

  • Può essere utilizzato più volte al tavolo
  • Più veloce per operazioni di inserimento e aggiornamento di un indice cluster

Entrambi i tipi di indice di migliorare le prestazioni quando si seleziona i dati con i campi che utilizzano l'indice ma rallenta di aggiornamento e le operazioni di inserimento.

A causa della più lenta inserire e aggiornare gli indici cluster deve essere impostato su un campo che è normalmente incrementale ie Id o Timestamp.

SQL Server normalmente solo utilizzo di un indice se la sua selettività è al di sopra del 95%.

Altri suggerimenti

Gli indici cluster fisicamente in ordine i dati sul disco.Questo significa che nessun extra dati è necessario per l'indice, ma ci può essere solo un indice cluster (ovviamente).Accesso ai dati tramite un indice cluster è più veloce.

Tutti gli altri indici non cluster.Un indice non cluster dispone di un duplicato dei dati da colonne indicizzate mantenuto ordinato insieme con puntatori ai dati effettivi righe (puntatori per l'indice cluster, se c'è).Questo significa che l'accesso ai dati attraverso un indice non cluster deve passare attraverso un ulteriore livello di indirezione.Tuttavia, se si seleziona solo i dati disponibili nelle colonne indicizzate è possibile ottenere i dati direttamente dalla duplicati i dati dell'indice (che è il motivo per cui è una buona idea per SELEZIONARE solo le colonne che avete bisogno e non usare *)

Gli indici cluster sono memorizzati fisicamente sul tavolo.Questo significa che sono il più veloce e si può avere solo un indice cluster per ogni tabella.

Gli indici Non cluster sono archiviati separatamente, e si può avere come molti come si desidera.

L'opzione migliore è quello di impostare il vostro indice cluster più utilizzati unica colonna, di solito il PK.Si dovrebbe sempre avere una selezionata indice cluster nelle tabelle, a meno che un motivo convincente--non riesco a pensare a una sola, ma hey, potrebbe essere là fuori ... per non farlo arriva.

Indice Cluster

  1. Ci può essere solo un indice cluster per una tabella.
  2. Di solito la chiave primaria.
  3. I nodi foglia di un indice cluster contengono le pagine di dati.

Indice Non Cluster

  1. Ci può essere solo 249 indici non cluster per una tabella(fino alla versione di sql 2005 e versioni successive supportano fino a 999 indici non cluster).
  2. Di solito effettuata su un tasto qualsiasi.
  3. Il nodo foglia di un indice non cluster non consiste di pagine di dati.Invece, i nodi foglia contengono righe di indice.

Indice Cluster

  • Solo un indice cluster può essere lì in una tabella
  • Ordinare i record e memorizzarli fisicamente secondo l'ordine
  • Il recupero dei dati è più veloce di indici non cluster
  • Non hanno bisogno di spazio extra per memorizzare la struttura logica

Non Clustered Index

  • Non ci può essere un qualsiasi numero di indici non cluster in una tabella
  • Non influenzano l'ordine fisico.Creare un ordine logico per le righe di dati e l'uso dei puntatori a dati fisici file
  • Data di inserimento/aggiornamento è più veloce di un indice cluster
  • Utilizzare lo spazio extra per memorizzare la struttura logica

A parte queste differenze è necessario sapere che, quando la tabella non è in cluster (quando la tabella non dispone di un indice cluster) file di dati sono disordinate e utilizza Heap struttura di dati, come la struttura dei dati.

Cluster in pratica significa che i dati che fisiche ordine in tabella.Questo è il motivo per cui si può avere solo uno per ogni tabella.

Unclustered significa che è "solo" un ordine logico.

Pro:

Gli indici cluster di grande lavoro per gli intervalli (ad es.select * from my_table dove my_key tra @min e @max)

In alcune condizioni, il DBMS non hanno a che fare il lavoro di ordinamento, se si utilizza un orderby istruzione.

Contro:

Gli indici cluster sono in grado di rallentare inserti perché il layout fisico del record modificato record sono messo, se le chiavi non sono in ordine sequenziale.

Un indice cluster in realtà descrive l'ordine in cui i record sono memorizzati fisicamente sul disco, quindi il motivo si può avere solo uno.

Un Indice Non Cluster definisce un ordine logico che non corrisponde all'ordine fisico su disco.

Un indice cluster è essenzialmente l'ordinamento di una copia dei dati in colonne indicizzate.

Il vantaggio principale di un indice cluster è che, quando la query (ricerca) individua i dati dell'indice quindi senza ulteriori IO è necessario per recuperare i dati.

L'overhead di gestione di un indice cluster, soprattutto, aggiornato frequentemente, tabella, può portare a scarse prestazioni e per questo motivo è preferibile creare un indice non cluster.

Un database indicizzato in due parti:un insieme di record fisici, che sono disposti in qualche ordine arbitrario, e un insieme di indici che consentono di identificare la sequenza in cui i record devono essere lette per produrre un risultato ordinato da un qualche criterio.Se non vi è alcuna correlazione tra la disposizione fisica e l'indice, poi la lettura di tutti i record in ordine può richiedere a fare un sacco di singoli record di operazioni di lettura.A causa di un database può essere in grado di leggere decine e decine di record consecutivi in meno tempo di quanto sarebbe necessario per leggere due non consecutivi di record, la prestazione può essere migliorata se i record che sono consecutivi nell'indice sono anche memorizzati consecutivamente su disco.Specificando che un indice cluster causerà il database di fare qualche sforzo (diverse banche dati diverse per quanto) di organizzare le cose in modo che i gruppi di record consecutivo che l'indice consecutivi sul disco.

Per esempio, se si inizia con un vuoto non cluster di database e aggiungere 10.000 record in sequenza casuale, il record sarebbe probabilmente aggiunte, in fine, nell'ordine in cui sono stati aggiunti.La lettura del database, nell'ordine, l'indice richiederebbe 10,000 un record legge.Se si dovesse utilizzare un database in cluster, tuttavia, il sistema può verificare quando l'aggiunta di ogni record se il record precedente è stato archiviato dalla stessa;se ha trovato che per essere il caso, si potrebbe scrivere che registrare con uno nuovo, alla fine del database.Si potrebbe quindi cercare il record fisico prima di slot dove spostato record utilizzato per soggiornare e vedere se il record che è seguita, che è stato salvato da se stesso.Se ha trovato che per essere il caso, si potrebbe spostare i record in quel punto.Utilizzando questo tipo di approccio potrebbe causare molti record di essere raggruppati in coppie, quindi potenzialmente quasi raddoppiando la velocità di lettura sequenziale.

In realtà, cluster di database, utilizzare più sofisticati algoritmi di questo.Una cosa fondamentale da notare, però, è che c'è un compromesso tra il tempo necessario per aggiornare il database e il tempo necessario per leggere in modo sequenziale.Il mantenimento di un database in cluster aumenterà in modo significativo la quantità di lavoro necessaria per aggiungere, rimuovere o aggiornare i record in qualsiasi modo che possano influenzare la sequenza di ordinamento.Se il database potrà essere letti in sequenza molto più spesso di quanto non sarà aggiornato, il clustering può essere una grande vittoria.Se verrà aggiornato spesso, ma raramente di leggere in sequenza, il clustering può essere una grande prestazione di scarico, soprattutto se la sequenza in cui gli elementi vengono aggiunti al database è indipendente dal loro ordinamento per quanto riguarda l'indice cluster.

// Copiato da MSDN, il secondo punto dell'indice non cluster non è chiaramente menzionato nelle altre risposte.

Cluster

  • Gli indici cluster ordinare e memorizzare i dati delle righe della tabella o della vista in base ai valori di chiave.Queste sono le colonne incluse nel definizione dell'indice.Ci può essere solo un indice cluster per ogni tabella, perché le righe di dati possono essere archiviati in un solo ordine.
  • L'unica volta che le righe di dati in una tabella vengono memorizzati in modo ordinato è se la tabella contiene un indice cluster.Quando una tabella è un indice cluster, la tabella si chiama tabella cluster.Se una tabella è l'indice cluster, le righe di dati sono memorizzati in un ordinato struttura chiamata heap.

Non cluster

  • Gli indici non cluster presentano una struttura separata dal righe di dati.Un indice non cluster contiene la chiave di indice non cluster di valori e di
    ogni valore della chiave di ingresso ha un puntatore alla riga di dati che contiene il valore della chiave.
  • Il puntatore da una riga di indice in un indice non cluster per una riga di dati è chiamato individuazione di riga.La struttura dell'individuazione di riga dipende se le pagine di dati sono memorizzati in un heap o di un cluster di tabella.Per un heap, una riga locator è un puntatore alla riga.Per un cluster tabella, l'individuazione di riga è la chiave di indice cluster.

Si potrebbe avere attraversato la teoria parte dal precedente post:

-L'Indice cluster come si può vedere direttamente i punti di registrare cioèil suo diretto quindi impiega meno tempo per una ricerca.Inoltre, non prendere qualsiasi extra di memoria e spazio per memorizzare l'indice

-Mentre, in Indice non cluster, indirettamente punti per l'Indice cluster quindi si avrà accesso al record effettivo, a causa della sua natura indiretta richiede qualche cosa di più tempo per accedere.Anche ha bisogno di memoria e di spazio per memorizzare l'indice

enter image description here

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top