2009-08-31 6 views
8

Sono interessato a scoprire se esiste un vantaggio in termini di prestazioni per il partizionamento di una colonna numerica che è spesso l'obiettivo di una query. Attualmente ho una visione materializzata che contiene ~ 50 milioni di record. Quando si utilizza un indice b-tree normale e la ricerca da questa colonna numerica ottengo un costo di 7 e risultati delle query in circa 0,8 secondi (con cache non innescata). Dopo aver aggiunto una partizione hash globale (con 64 partizioni) per quella colonna, ottengo un costo di 6 e i risultati delle query in circa 0,2 secondi (sempre con cache non innescata).Un indice partizionato globalmente migliore (più veloce) di un indice non partizionato?

La mia prima reazione è che l'indice partizionato ha migliorato le prestazioni della mia query. Tuttavia, mi rendo conto che questa potrebbe essere solo una coincidenza e potrebbe dipendere totalmente dai valori ricercati o da altri di cui non sono a conoscenza. Quindi la mia domanda è: c'è un vantaggio in termini di prestazioni nell'aggiungere una partizione hash globale a una colonna numerica su una tabella di grandi dimensioni o è il costo di determinare quali partizioni di indice eseguire la scansione in eccesso dal costo di eseguire una scansione dell'intervallo completo su un partizione non indicizzata?

Sono sicuro che questo, come molte domande Oracle, può essere risolto con un "dipende". :) Sono interessato ad apprendere quali fattori dovrei considerare per determinare i benefici di ciascun approccio.

Grazie!

risposta

4

Sono sicuro che hai trovato questo riferimento nella tua ricerca - Partitioned Tables and Indexes. Tuttavia, vi fornisco un link se qualcuno è interessato, questo è un ottimo materiale sul partizionamento.

Direttamente al punto: l'indice partizionato scompone l'indice in pezzi (16 nella situazione) e distribuisce i dati in base alla chiave di partizione con hash. Quando si desidera utilizzarlo, Oracle "calcola" l'hash della chiave e determina in quale sezione continuare con la ricerca.

Sapendo come funziona la ricerca indice, su dati davvero enormi, penso che sia meglio scegliere l'indice partizionato per ridurre l'albero dell'indice che si attraversa (indice regolare). Dipende molto dai dati, che si trovano nella tabella (come è composto l'albero dell'indice regolare) e che esegue l'hashing e il salto diretto al nodo inferiore più velocemente rispetto alla normale traiettoria dell'albero dal nodo iniziale.

Infine, è necessario essere più sicuri dei risultati del test. Se una tecnica fornisce risultati migliori sui dati esatti rispetto ad altri, non preoccuparti di implementarla.