Che cos'è un indice cluster?


15

Ho bisogno di una breve spiegazione dell'indice cluster.

  • Che cos'è un indice cluster?
  • Quali sono le migliori pratiche per l'utilizzo dell'indice cluster?

È una buona idea utilizzare una data in un indice cluster poiché i nuovi dati vengono sempre aggiunti alla fine della tabella.
Ralph Winters,

1
Forse, ma non sempre.
mrdenny,

@mrdenny - potresti approfondire quando non sarebbe così?
Ralph Winters

1
Se le righe vengono inserite fuori servizio. Se la tabella è in genere più richiesta dalla chiave primaria. Se la chiave primaria è un INT (o più piccolo) e ci saranno molti indici non cluster sulla tabella di una chiave cluster datetime sarebbe più grande e meno efficiente. Se la tabella della data non verrà mai interrogata dalla colonna dell'uso è come se la chiave di clustering non valesse la pena poiché verrebbero utilizzati solo gli indici non cluster.
mrdenny,

@mrdenny: anche se la tabella non ha una colonna di date (un sottoinsieme del tuo ultimo :)
ypercubeᵀᴹ

Risposte:


15

In parole povere...

Un elenco telefonico: i dati sono l'indice / l'indice sono i dati. Per cercarti, inizierei con Rezaei, ad esempio Amir. Non è necessaria alcuna ricerca esterna.

In termini di database:

I dati della tabella e l'indice cluster sono uguali (in SQL Server, anche InnoDB, Oracle IOT)

Le migliori pratiche sono ristrette, numeriche, in costante aumento (si pensi alla colonna IDENTITY o Autonumber). I tipi di dati come i GUID non sono una buona idea

Link da leggere (per evitare di gonfiare questa risposta)

Modifica, per spiegare appieno i miei suggerimenti sulle migliori pratiche, segui il link nel commento di Eric Humphrey: Queen of Indexing: Kimberly Tripp



1
E qui sta il problema dell'applicazione delle "migliori pratiche" senza contesto. Ad esempio, se i criteri di ricerca principali per una tabella di grandi dimensioni frequentemente ricercata sono un intervallo di date, la posizione migliore per l'indice cluster è la data di ricerca NON la chiave primaria. Dire che la tabella e l'indice cluster sono uno e lo stesso è un po 'troppo semplificato. I dati vengono effettivamente archiviati nell'ordine dettato dall'indice cluster. Tra le altre cose, ciò significa che gli indici cluster sono particolarmente utili per le ricerche di intervallo che restituiscono l'intero set di dati.
Russell Steen,

2
@Russell Steen: 1. Ho incluso i collegamenti 2. L'OP ha dovuto chiedere, considera a quale livello ho dato questa risposta a 3. Eric Humphrey ha fornito un collegamento per la creazione. Possiamo esaminare caso per caso ciò che noi ragazzi più esperti conosciamo e capiamo, ma siamo qui per aiutare a educare o sopraffare ...?
gbn,

Ho sentito quello che stai dicendo. Il problema non è con la tua risposta di per sé, ma nel fatto che le persone meno esperte di te corrono in giro citando e applicando qualcosa perché è "la migliore pratica" senza capire l'uso e il contesto per cui è stata scritta la migliore pratica - Sostieni che sì, siamo qui per educare e che citare le migliori pratiche senza fornire più contesto direttamente nel post non fa altrettanto bene.
Russell Steen,

2
Oh, ho appena notato il SQL-Servertag, ignorare.
ypercubeᵀᴹ

3

È un indice sui dati stessi in modo tale che i record siano fisicamente ordinati in base al campo in cui si trova l'indice cluster. Questo è il motivo per cui è possibile avere un solo indice cluster per tabella.

L'indice non cluster non è così veloce per le ricerche ma puoi avere molti di questi tipi di indici su una tabella.


3
Gli indici non cluster possono essere altrettanto efficaci per le ricerche, se l'indice non cluster copre la ricerca in questione.
Russell Steen,

@Russell Non è possibile che sia più veloce in quanto l'indice ha forzato l'ordinamento effettivo dei dati. Non esiste un modo più semplice / veloce per SQL o qualsiasi RDBMS per trovare le informazioni di cui ha bisogno.
kacalapy,

4
Non ho detto più velocemente. Un indice di copertura ha tutti i dati richiesti nella selezione nell'indice - IN ORDINE, in una posizione separata sul disco. Quindi una selezione contro un indice di copertura corrispondente non raggiunge mai la tabella.
Russell Steen,

2
Un NCI di copertura probabilmente sarà più piccolo, il che significa meno pagine da leggere e più veloce.
Martin Smith,

Il motivo per avere un solo indice cluster su una tabella non è l'ordinamento fisico, le pagine dell'indice sono sempre ordinate logicamente e l'allocazione contigua delle pagine non è garantita. È possibile disporre di un solo indice cluster per tabella poiché l'indice cluster è la tabella stessa e gli indici non cluster sono le copie della tabella con le colonne richieste.
Manoj Pandey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.