Oracle Database
indici
Ricerca…
introduzione
Qui spiegherò diversi indici usando l'esempio, come l'indice aumenta le prestazioni della query, come l'indice riduce le prestazioni DML, ecc
indice b-tree
CREATE INDEX ord_customer_ix ON orders (customer_id);
Per impostazione predefinita, se non menzioniamo nulla, oracle crea un indice come indice b-tree. Ma dovremmo sapere quando usarlo. L'indice B-tree memorizza i dati come formato di albero binario. Come sappiamo, index è un oggetto schema che memorizza una sorta di voce per ogni valore per la colonna indicizzata. Quindi, ogni volta che una ricerca avviene su quelle colonne, controlla nell'indice la posizione esatta di quel record per accedere velocemente. Pochi punti sull'indicizzazione:
- Per cercare la voce nell'indice, viene utilizzata una sorta di algoritmo di ricerca binaria.
- Quando la cardinalità dei dati è elevata, l' indice b-tree è perfetto da usare.
- L'indice rende lento DML, come per ogni record, ci dovrebbe essere una voce nell'indice per la colonna indicizzata.
- Quindi, se non necessario, dovremmo evitare di creare indici.
Indice bitmap
CREATE BITMAP INDEX
emp_bitmap_idx
ON index_demo (gender);
- L'indice bitmap viene utilizzato quando la cardinalità dei dati è bassa.
- Qui, Gender ha un valore con cardinalità bassa. I valori possono essere Maschio, Femmina e altri.
- Quindi, se creiamo un albero binario per questi 3 valori durante la ricerca avrà una traversata non necessaria.
- Nelle strutture bitmap, viene creato un array bidimensionale con una colonna per ogni riga della tabella che viene indicizzata. Ogni colonna rappresenta un valore distinto all'interno dell'indice bitmap. Questo array bidimensionale rappresenta ciascun valore all'interno dell'indice moltiplicato per il numero di righe nella tabella.
- Al momento del recupero della riga, Oracle decomprime la bitmap nei buffer dei dati RAM in modo che possa essere rapidamente scansionata per trovare i valori corrispondenti. Questi valori di corrispondenza vengono consegnati a Oracle sotto forma di un elenco ID di riga e questi valori di ID di riga possono accedere direttamente alle informazioni richieste.
Indice basato sulle funzioni
CREATE INDEX first_name_idx ON user_data (UPPER(first_name));
SELECT *
FROM user_data
WHERE UPPER(first_name) = 'JOHN2';
- Indice basato sulla funzione significa, creazione dell'indice basato su una funzione.
- Se nella ricerca (clausola where), viene utilizzata frequentemente qualsiasi funzione, è preferibile creare un indice basato su tale funzione.
- Qui, nell'esempio, per la ricerca, viene utilizzata la funzione Upper () . Quindi, è meglio creare un indice usando la funzione superiore.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow