Oracle
 sql >> Database >  >> RDS >> Oracle

Come viene calcolato il fattore di clustering dell'indice Oracle

Sommario

Cos'è il fattore di clustering dell'indice Oracle (CF)?

Il fattore di clustering è un numero che rappresenta il grado di distribuzione casuale dei dati in una tabella rispetto alla colonna indicizzata. In parole povere, è il numero di "interruttori di blocco" durante la lettura di una tabella utilizzando un indice.

È una statistica importante che gioca un ruolo importante nel calcolo dell'ottimizzatore. Viene utilizzato per ponderare il calcolo per le scansioni dell'intervallo dell'indice. Quando il fattore di clustering è maggiore, il costo della scansione dell'intervallo dell'indice è maggiore

Un buon fattore di Clustering è uguale (o prossimo) ai valori del numero di blocchi della tabella.

Un fattore di clustering errato è uguale (o vicino) al numero di righe della tabella.

Come viene calcolata la FC?

Oracle calcola il fattore di clustering eseguendo una scansione completa dell'indice percorrendo i blocchi foglia da un'estremità all'altra. Per ogni voce in ogni foglia, Oracle controlla il numero assoluto di file e l'id del blocco, come ottenuto dal ROWID del valore indicizzato. Tiene un conteggio progressivo di quanti blocchi "diversi" contengono righe di dati a cui punta l'indice. L'indirizzo del blocco della prima voce viene confrontato con l'indirizzo del blocco della seconda voce. Se è lo stesso blocco di tabella, Oracle non incrementa il contatore. Se i blocchi della tabella sono diversi, Oracle ne aggiunge uno al conteggio. Questo processo di conteggio continua da una voce all'altra confrontando sempre la voce precedente con quella attuale.

Quanto sopra è un buon esempio di CF poiché CF è uguale al numero di blocchi

Esempio di fattore di clustering errato

Qui il fattore di raggruppamento è uguale a no di righe

Questo metodo di conteggio ha il suo risultato inaspettato. Supponiamo che i dati siano popolati su un piccolo insieme di blocchi, ma non in ordine in riferimento alla chiave dell'indice, quindi un insieme di righe potrebbe sembrare essere su un grande insieme di blocchi quando forse ci sono solo pochi veri blocchi distinti . Quindi CF sarebbe più alto ma in realtà sta toccando pochissimi blocchi. Questo problema può essere mitigato in 12c utilizzando le preferenze della tabella e specificando il blocco memorizzato nella cache della tabella.

come migliorare il fattore di clustering in Oracle

Una ricostruzione dell'indice non avrebbe alcun effetto sul fattore di clustering. La tabella deve essere ordinata e ricostruita per ridurre il fattore di clustering.

Query per determinare il fattore di clustering 

CF è memorizzato nel dizionario dei dati e può essere visualizzato da dba_indexes (o user_indexes).

In effetti, tutte le statistiche dell'indice si trovano lì

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

In che modo il fattore di clustering dell'indice Oracle influisce sul piano di ottimizzazione?

Il fattore di clustering è la statistica principale utilizzata dall'ottimizzatore per ponderare i percorsi di accesso all'indice. È una stima del numero di LIO per i blocchi tabella necessari per acquisire tutte le righe che soddisfano la query nell'ordine. Maggiore è il fattore di clustering, più LIO verranno stimati dall'ottimizzatore. Più LIO sono richiesti, meno attraente e quindi più costoso sarà l'uso dell'indice.

Articolo correlato
Indice di partizione Oracle:informazioni sull'indice di partizione Oracle, cosa sono gli indici globali non partizionati?, cosa sono gli indici con prefisso locale, l'indice locale senza prefisso
trova gli indici su una tabella in Oracle:consulta questo articolo per trovare query su come per trovare gli indici su una tabella in Oracle, elenca tutti gli indici nello schema, lo stato dell'indice, la colonna dell'indice
tipi di indici in Oracle:questa pagina contiene informazioni sugli indici di Oracle, diversi tipi di indici in Oracle con un esempio, come per creare/eliminare/modificare l'indice in Oracle
Indice virtuale in Oracle:che cos'è l'indice virtuale in Oracle? Usi, limitazioni, vantaggi e come utilizzare per verificare il piano spiegato nel database Oracle, parametro nascosto _USE_NOSEGMENT_INDEXES