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

Indici Oracle e tipi di indici in Oracle con esempio

Discuteremo degli indici/tipi di indici Oracle in Oracle con un esempio in questo post. Esaminerò tutte le opzioni su come creare l'indice in Oracle. Discuterei anche di come controllare la dimensione dell'indice in Oracle. Spero che questo post ti piacerà. Non vedo l'ora di ricevere  feedback su questo post

Cosa sono gli indici Oracle?

  • Proprio come abbiamo index presente nei libri di testo per aiutarci a trovare l'argomento particolare nel libro, Oracle index si comporta allo stesso modo. Abbiamo diversi tipi di indici in Oracle.
  • Gli indici vengono utilizzati per cercare rapidamente le righe nella tabella Oracle. Se l'indice non è presente, la query select deve leggere l'intera tabella e restituire le righe. Con Index, le righe possono essere recuperate rapidamente
  • Dovremmo creare indici quando si recupera un numero ridotto di righe da una tabella. o per recuperare il primo set di righe il più velocemente possibile da una query che alla fine restituirà un numero elevato di righe. Dipende anche dalla distribuzione dei dati, ovvero dal fattore di clustering
  • Gli indici sono logicamente e fisicamente indipendenti dai dati nella tabella associata.
  • Gli indici sono strutture facoltative associate a tabelle e cluster. Puoi creare indici su una o più colonne di una tabella per velocizzare l'esecuzione di istruzioni SQL su quella tabella.
  • Gli indici sono il mezzo principale per ridurre l'I/O del disco se usati correttamente.
  • La query decide all'inizio se usare index o no
  • La cosa migliore con gli indici è che le prestazioni di recupero dei dati indicizzati rimangono quasi costanti, anche quando vengono inserite nuove righe. Tuttavia, la presenza di molti indici su una tabella riduce le prestazioni di aggiornamenti, eliminazioni e inserimenti perché Oracle deve aggiornare anche gli indici associati alla tabella.
  • Se sei il proprietario di una tabella, puoi creare un indice o se desideri creare un indice per la tabella in un altro schema, dovresti avere il privilegio di sistema CREATE ANY INDEX o il privilegio di indice su quella tabella

Tipo logico di indici

Definisce le caratteristiche applicative dell'Indice

Unico o non unico Un indice può essere univoco o non univoco. Oracle crea un indice univoco per la chiave primaria e i vincoli di chiave univoca
Se in quella colonna sono già presenti indici non univoci, non verrà creato un nuovo indice univoco per la chiave primaria in Oracle
Composito L'indice può essere composto da una o più colonne. Gli indici compositi possono velocizzare il recupero dei dati per le istruzioni SELECT in cui la clausola WHERE fa riferimento a tutte o alla parte iniziale delle colonne nell'indice composito.
Indici basati su funzioni I dati della colonna indicizzata si basano su un calcolo
Indici di dominio dell'applicazione Questo indice viene utilizzato in applicazioni speciali (Spaziale, Testo).

Che cos'è la pseudocolonna ROWID

ROWID restituisce l'indirizzo di ogni riga della tabella. Oracle assegna un ROWID a ciascuna riga.ROWID consiste nel seguente

  • Il numero dell'oggetto dati dell'oggetto
  • Il blocco di dati nel file di dati in cui risiede la riga
  • La posizione della riga nel blocco dati (la prima riga è 0)
  • Il file di dati in cui risiede la riga (il primo file è 1). Il numero del file è relativo al tablespace.

Oracle utilizza ROWID internamente per accedere alle righe. Ad esempio, Oracle memorizza ROWID nell'indice e lo utilizza per accedere alla riga nella tabella.

Puoi visualizzare il ROWID delle righe usando il comando SELECT come segue:

seleziona rowid, emp_name da emp;

ROWID EMP_NAME

AAADC576474722aSAAA   Giovanni

Oracle fornisce un pacchetto chiamato DBMS_ROWID per decodificare ROWID.

Una volta assegnata una riga, un ROWID Oracle non cambia ROWID durante la vita della riga. Ma cambia quando la tabella viene ricostruita Quando le righe vengono spostate nella partizione o quando la tabella viene ridotta

Tipi di indici in Oracle con esempio

Esistono 6 diversi tipi di indici in Oracle

(1) Albero B

(2) B-Tree compresso

(3)  Bitmap

(4) Basato su funzioni

(5) Tasto di retromarcia (RKI)

(6) Tavola organizzata dell'indice (IOT).

Scopriamo insieme ciascuno di essi nel dettaglio e come creare un indice in Oracle per ognuno di questi tipi

B – Indice dell'albero:

  • Gli indici B-Tree (albero bilanciato) sono il tipo più comune di indice.
  • L'indice B-Tree ha memorizzato il ROWID e il valore della chiave dell'indice in una struttura ad albero.
  • Quando si crea un indice, viene creato un blocco ROOT, quindi vengono creati blocchi BRANCH e infine blocchi LEAF.
  • Ogni ramo contiene l'intervallo di dati contenuto dai suoi blocchi foglia e ogni radice contiene l'intervallo di dati contenuto dai suoi rami:
  • Gli indici B-Tree sono particolarmente utili sulle colonne che appaiono nella clausola where (SELECT … WHERE EMPNO=1).
  • Il server Oracle mantiene l'albero bilanciato suddividendo i blocchi di indice, quando vengono inseriti nuovi dati nella tabella.
  • Ogni volta che viene eseguita un'istruzione DML sulla tabella dell'indice, si verifica un'attività dell'indice, che fa crescere l'indice (aggiungi foglie e rami).

Vantaggi

  • Tutti i blocchi di foglie dell'albero sono alla stessa profondità.
  • Gli indici B-tree rimangono automaticamente bilanciati.
  • Tutti i blocchi dell'albero B sono in media pieni per tre quarti.
  • I B-tree offrono prestazioni di recupero eccellenti per un'ampia gamma di query, tra cui corrispondenza esatta e ricerche per intervallo.
  • Gli inserimenti, gli aggiornamenti e le eliminazioni sono efficienti e mantengono l'ordine delle chiavi per un rapido recupero.
  • Le prestazioni del B-tree sono buone sia per i tavoli piccoli che per quelli grandi e non si riducono all'aumentare delle dimensioni di un tavolo.
CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
TABLESPACE <tablespace_name>;

Example
Create index   scott.exp_idx   on table scott.example(  name)
Tablespace TOOLS;

Che cosa sono gli indici B-tree compressi

  • Gli indici B-Tree compressi sono costruiti su tabelle di grandi dimensioni, in un ambiente di data warehouse. In questo tipo di indice, le occorrenze duplicate dello stesso valore vengono eliminate, riducendo così la quantità di spazio di archiviazione richiesta dall'indice.
  • In un indice B-Tree compresso, per ogni valore chiave, viene mantenuto un elenco di ROWID
  • Specificando la parola chiave COMPRESS durante la creazione di un indice (CREATE INDEX … COMPRESS) verrà creato un indice B-Tree compresso.
  • Un normale indice B-Tree può essere ricostruito utilizzando la parola chiave COMPRESS per comprimerlo.
CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>
Compress  <column number>

Che cosa sono gli indici bitmap

  • Gli indici bitmap sono più appropriati su dati con cardinalità distinta e bassa (al contrario degli indici B-Tree).
  • Questo tipo di indice crea una mappa binaria di tutti i valori dell'indice e memorizza tale mappa nei blocchi dell'indice, ciò significa che l'indice richiederà meno spazio dell'indice B-Tree.
  • Ogni bit nella bitmap corrisponde a un possibile rowid. Se il bit è impostato, significa che la riga con il corrispondente rowid contiene il valore della chiave. Una funzione di mappatura converte la posizione del bit in un rowid effettivo, quindi l'indice bitmap fornisce la stessa funzionalità di un indice normale anche se utilizza internamente una rappresentazione diversa. Se il numero di valori chiave differenti è piccolo, gli indici bitmap sono molto efficienti in termini di spazio
  • Quando sono presenti indici bitmap sulle tabelle, gli aggiornamenti elimineranno i blocchi completi delle tabelle. Pertanto, l'indice bitmap è utile su colonne di grandi dimensioni con attività a basso DML (aggiornamenti non frequenti) o tabelle di sola lettura. Questo è il motivo per cui spesso gli indici bitmap sono ampiamente utilizzati nell'ambiente di data warehouse (DWH).
  • La struttura dell'Indice Bitmap contiene una mappa di bit che indicano il valore nella colonna, ad esempio, per la colonna GENDER, il blocco dell'indice conterrà la ROWID iniziale, la ROWID finale e la bitmap:
  • Gli indici bitmap sono molto utili quando vengono creati su colonne con cardinalità bassa, utilizzati con l'operatore AND &OR nella condizione di query:
CREATE BITMAP  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>

Esempio

CREATE BITMAP INDEX ON emp_data(gender);
SELECT COUNT(*) FROM emp_data
WHERE GENDER=’M”;

Vantaggi degli indici bitmap

  • Tempi di risposta ridotti per classi di query di grandi dimensioni
  • Una sostanziale riduzione dell'utilizzo dello spazio rispetto ad altre tecniche di indicizzazione
  • Migliori prestazioni notevoli anche su hardware di fascia molto bassa
  • DML e carichi paralleli molto efficienti

Indici basati su funzioni

Gli indici basati su funzioni sono indici creati su colonne a cui viene solitamente applicata una funzione.

Quando si utilizza una funzione su una colonna indicizzata, l'indice viene ignorato, quindi un indice basato su funzione è molto utile per queste operazioni.

CREATE INDEX <index_name>
ON <table_name> [ Function(<column_name>,<column_name.)]
TABLESPACE <tablespace_name>;

Example
CREATE INDEX EMP_IDX on EMP(UPPER(ENAME));
SELECT *
FROM Emp
WHERE UPPER(Ename) like ‘JOHN`;

Che cosa sono gli indici a chiave inversa

  • Sono tipi speciali di indici B-Tree e sono molto utili se creati su colonne contenenti numeri sequenziali.
  • Quando si utilizza un normale B-Tree, l'indice cresce fino ad avere molti rami e forse diversi livelli, causando così un degrado delle prestazioni, l'RKI risolve il problema invertendo i byte di ciascuna chiave di colonna e indicizzando i nuovi dati.
  • Questo metodo distribuisce i dati in modo uniforme nell'indice. La creazione di un RKI viene eseguita utilizzando la parola chiave REVERSE:CREATE INDEX … ON … REVERSE;
CREATE INDEX <index_name>
ON <table_name> (<column_name>)
TABLESPACE <tablespace_name>
REVERSE;

Example

CREATE INDEX emp_idx i ON emp_table (firstname,lastname) REVERSE;

Che cos'è l'Indice Organised Tables (IOT)

  • Quando utilizziamo B-Tree, gli indici Bitmap e Reverse key vengono utilizzati per le tabelle che archiviano i dati in modo non ordinato (tabelle heap).
  • Questi indici contengono la posizione del ROWID della riga della tabella richiesta, consentendo così l'accesso diretto ai dati della riga
  • Una tabella organizzata per indice differisce da una tabella normale perché i dati per la tabella sono mantenuti nell'indice associato. Le modifiche ai dati della tabella, come l'aggiunta di nuove righe, l'aggiornamento di righe o l'eliminazione di righe, comportano l'aggiornamento dell'indice.
  • La tabella organizzata per indici è come una normale tabella con un indice su una o più delle sue colonne, ma invece di mantenere due archivi separati per la tabella e l'indice B-tree, il sistema di database mantiene solo un singolo B- indice dell'albero che contiene sia il valore della chiave codificata che i valori di colonna associati per la riga corrispondente. Anziché avere l'ID riga di una riga come secondo elemento della voce dell'indice, la riga di dati effettiva viene archiviata nell'indice B-tree. Le righe di dati sono basate sulla chiave primaria per la tabella e ogni voce dell'indice B-tree contiene . Le tabelle organizzate per indici sono adatte per accedere ai dati tramite la chiave primaria o qualsiasi chiave che sia un prefisso valido della chiave primaria.
  • Non c'è duplicazione dei valori chiave perché solo i valori delle colonne non chiave sono memorizzati con la chiave. È possibile creare indici secondari per fornire un accesso efficiente da parte di altre colonne. Le applicazioni manipolano la tabella organizzata per indici proprio come una normale tabella, utilizzando le istruzioni SQL. Tuttavia, il sistema di database esegue tutte le operazioni manipolando l'indice B-tree corrispondente.

Caratteristiche della tabella organizzata di Index

  • La chiave primaria identifica in modo univoco una riga; la chiave primaria deve essere specificata
  • Accesso basato sulla chiave primaria
  • Il rowid logico nella pseudocolonna ROWID consente di creare indici secondari
  • vincolo UNICO non consentito ma sono consentiti trigger
  • Non può essere archiviato in un cluster
  • Può contenere colonne LOB ma non colonne LONG
  • Distribuzione e replica non supportate


CREATE TABLE command:

CREATE TABLE …

ORGANIZATION INDEX TABLESPACE … (specify this is an IOT)

PCTTHRESHOLD … (specify % of block to hold in order to store row data, valid 0-50 (default 50))

INCLUDING … (specify which column to break a row when row length exceeds PCTTHRESHOLD) OVERFLOW TABLESPACE … (specify the tablespace where the second part of the row will be stored) MAPPING TABLE; (cause creation of a mapping table, needed when creating Bitmap index on IOT)

La tabella di mappatura associa i ROWID fisici dell'indice ai ROWID logici nell'IOT. IOT utilizza i ROWID logici per gestire l'accesso alle tabelle in base all'indice poiché i ROWID fisici vengono modificati ogni volta che i dati vengono aggiunti o rimossi dalla tabella. Per distinguere l'IOT da altri indici, interrogare la vista USER_INDEXES utilizzando la colonna pct_direct_access. Solo IOT avrà un valore non NULL per questa colonna.

Indici di dominio dell'applicazione

Oracle fornisce indicizzazione estensibile per ospitare indici su tipi di dati complessi come documenti, dati spaziali, immagini e clip video e per utilizzare tecniche di indicizzazione specializzate.

Con l'indicizzazione estensibile, puoi incapsulare routine di gestione dell'indice specifiche dell'applicazione come un tipo di indice oggetto schema e definire un indice di dominio (un indice specifico dell'applicazione) su colonne di tabella o attributi di un tipo di oggetto. L'indicizzazione estensibile fornisce anche un'elaborazione efficiente dell'operatore specifico dell'applicazione s.

Il software applicativo, chiamato cartridge e, controlla la struttura e il contenuto di un indice di dominio. Il server Oracle interagisce con l'applicazione per creare, mantenere e cercare l'indice di dominio. La struttura dell'indice stessa può essere archiviata nel database Oracle come tabella organizzata per indice o esternamente come file.

Utilizzo degli indici di dominio

Gli indici di dominio vengono creati utilizzando la logica di indicizzazione fornita da un tipo di indice definito dall'utente. Un tipo di indice fornisce un meccanismo efficiente per accedere ai dati che soddisfano determinati predicati dell'operatore. In genere, il tipo di indice definito dall'utente fa parte di un'opzione Oracle, come l'opzione Spatial.

Ad esempio, SpatialIndextype consente una ricerca e un recupero efficienti di dati spaziali che si sovrappongono a un determinato riquadro di delimitazione.

La cartuccia determina i parametri che è possibile specificare durante la creazione e la gestione dell'indice di dominio. Allo stesso modo, le caratteristiche prestazionali e di archiviazione dell'indice di dominio sono presentate nella documentazione specifica della cartuccia.

Finora abbiamo trattato diversi tipi di indici in Oracle con un esempio, ora vediamo come modificarli/eliminarli/ricrearli

Come ricreare gli indici/ricostruire l'indice in Oracle

Possiamo utilizzare l'istruzione ALTER INDEX … REBUILD per riorganizzare o compattare un indice esistente o per modificarne le caratteristiche di archiviazione

L'istruzione REBUILD utilizza l'indice esistente come base per quello nuovo.

ALTER INDEX … REBUILD è solitamente più veloce che eliminare e ricreare un indice.

Legge tutti i blocchi di indice utilizzando I/O multiblocco, quindi elimina i blocchi di diramazione.

Un ulteriore vantaggio di questo approccio è che il vecchio indice è ancora disponibile per le query mentre è in corso la ricostruzione.

Alter index  <index name>  rebuild ;

Alter index  <index name>  rebuild  tablespace <name>;

Come scrivere dichiarazioni che evitano l'uso di indici

  • Puoi utilizzare il suggerimento dell'ottimizzatore NO_INDEX per dare al CBO la massima flessibilità mentre non consente l'uso di un determinato indice.
  • Puoi utilizzare l'hint FULL per forzare l'ottimizzatore a scegliere una scansione completa della tabella anziché una scansione dell'indice.
  • Puoi utilizzare i suggerimenti INDEX, INDEX_COMBINE o AND_EQUAL per forzare l'ottimizzatore a utilizzare un indice o un insieme di indici elencati anziché un altro.

Come raccogliere statistiche per gli indici

Le statistiche dell'indice vengono raccolte utilizzando l'istruzione ANALYZE INDEX o dbms_stats.

Le opzioni disponibili sono CALCOLARE/STIMA STATISTICHE o CONVALIDA STRUTTURA.

Da 10g in poi, quando viene creato l'indice, il calcolo delle statistiche viene eseguito automaticamente

Quando si utilizza la struttura di convalida, Oracle popola la vista INDEX_STATS con le statistiche relative all'indice analizzato. Le statistiche contengono il numero di righe e blocchi di foglie (LF_ROWS, LF_BLKS), numero di righe e blocchi di rami (BR_ROWS, BR_BLKS), numero di righe di foglie eliminate (DEL_LF_ROWS), spazio utilizzato (USED_SPACE), numero di chiavi distinte (DISTINCT_KEYS) , ecc. Queste statistiche possono essere utilizzate per determinare se l' indice deve essere ricostruito o meno

In che modo Oracle decide sull'utilizzo di index?

Oracle decide automaticamente se l'indice deve essere utilizzato dal motore di ottimizzazione.

Oracle decide se utilizzare un indice o meno a seconda della query.

Oracle può capire se l'utilizzo di un indice migliorerà le prestazioni nella query data. Se Oracle ritiene che l'utilizzo di un indice migliorerà le prestazioni, utilizzerà l'indice, altrimenti ignorerà l'indice.

Cerchiamo   di capire da questo esempio

Abbiamo una tabella emp   che contiene emp_name, stipendio, dept_no ,emp_no, date_of_joining e abbiamo un indice su emp_name

Interrogazione 1

select * from emp  where emp_name = 'John';

La query precedente utilizzerà l'indice mentre stiamo cercando di ottenere informazioni su un emp in base al nome.

Interrogazione 2

select * from emp;

La query precedente non utilizzerà l'indice poiché stiamo cercando di trovare tutte le righe nella tabella e non abbiamo la clausola where nella query

Interrogazione 3

select * from emp where dept_no =5;

La query precedente non utilizzerà l'indice poiché la clausola where non seleziona la colonna che ha un indice

Interrogazione 4

select * from emp where substr(emp_name,1,4) =’XYZW’;

La query precedente non utilizzerà l'indice poiché la clausola where utilizza la funzione sulla colonna e non abbiamo un indice funzionale su emp_name

Come creare o ricostruire l'indice online?

Oracle utilizzato per bloccare la tabella su cui viene creato l'indice durante il processo di creazione nelle versioni precedenti. Ciò rende la tabella non disponibile per la manipolazione dei dati durante la creazione dell'indice.

Ora con 8i, Oracle ha introdotto la ricostruzione online dell'indice in cui Oracle non blocca la tabella su cui viene creato l'indice.

L'indicizzazione online viene fornita tramite la parola chiave ONLINE.

CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>
Online;

Alter index <index name> rebuild online;

Fondamentalmente, con una ricostruzione online, Oracle blocca la tabella all'inizio e alla fine della creazione dell'indice. Consente transazioni intermedie. Il meccanismo è stato decisamente migliorato con 11g e 12c

Quali sono gli svantaggi degli  Indici

Gli indici aumentano le prestazioni di una query selezionata, possono anche ridurre le prestazioni della manipolazione dei dati.

Molti indici su una tabella possono rallentare drasticamente INSERTS ed DELETES

Più indici sono sulla tabella, più tempo impiegherà inserimenti ed eliminazioni.

Allo stesso modo, ogni modifica a una colonna indicizzata richiederà una modifica all'indice.

Quindi dobbiamo scegliere l'indice con molta attenzione e eliminare quelli che non sono in uso.

Sebbene anche lo spazio extra occupato dagli indici sia una considerazione, potrebbe non avere molta importanza poiché il costo dell'archiviazione dei dati è notevolmente diminuito.

Che cos'è Indici inutilizzabili

Un indice inutilizzabile viene ignorato dall'ottimizzatore nel decidere il piano di spiegazione

Inoltre, non è gestito da DML, ovvero aggiorna, inserisci, elimina aggiorna l'indice

Potrebbero esserci diversi motivi per cui l'indice è in uno stato inutilizzabile. Hai eseguito la ricostruzione della tabella ma non hai ricostruito l'indice, quindi l'indice sarà in uno stato inutilizzabile. Un altro motivo per rendere inutilizzabile un indice è migliorare le prestazioni del caricamento di massa. Un altro motivo potrebbe essere l'ottimizzatore che rileva l'indice sbagliato ogni volta e ogni volta è fondamentale, quindi potresti decidere di renderlo inutilizzabile

Un indice o una partizione di indice inutilizzabile deve essere ricostruito o eliminato e ricreato prima di poter essere utilizzato. Il troncamento di una tabella rende valido un indice inutilizzabile.

A partire da Oracle Database 11g Release 2, quando rendi inutilizzabile un indice esistente, il relativo segmento di indice viene eliminato.

La funzionalità degli indici inutilizzabili dipende dall'impostazione del parametro di inizializzazione SKIP_UNUSABLE_INDEXES.

Quando SKIP_UNUSABLE_INDEXES è TRUE (impostazione predefinita), allora:

Le istruzioni DML sulla tabella continuano, ma gli indici inutilizzabili non vengono mantenuti.

Le istruzioni DML terminano con un errore se sono presenti indici inutilizzabili utilizzati per applicare il vincolo UNIQUE.

Per gli indici non partizionati, l'ottimizzatore non considera gli indici inutilizzabili durante la creazione di un piano di accesso per le istruzioni SELECT. L'unica eccezione è quando un indice viene specificato in modo esplicito con l'hint INDEX().

Quando SKIP_UNUSABLE_INDEXES è FALSE, allora:

Se sono presenti indici o partizioni di indice inutilizzabili, tutte le istruzioni DML che causerebbero l'aggiornamento di tali indici o partizioni di indice vengono terminate con un errore.

Per le istruzioni SELECT, se è presente un indice inutilizzabile o una partizione di indice inutilizzabile ma l'ottimizzatore non sceglie di utilizzarlo per il piano di accesso, l'istruzione procede. Tuttavia, se l'ottimizzatore sceglie di utilizzare l'indice inutilizzabile o la partizione dell'indice inutilizzabile, l'istruzione termina con un errore.

Viste del dizionario di dati su Indici

DBA_INDEXES ALL_INDEXES USER_INDEXES La vista DBA descrive gli indici su tutte le tabelle nel database. La vista ALL descrive gli indici su tutte le tabelle accessibili all'utente. La visualizzazione USER è limitata agli indici di proprietà dell'utente. Alcune colonne in queste viste contengono statistiche generate dal pacchetto DBMS_STATS o dall'istruzione ANALYZE.
DBA_IND_COLUMNS ALL_IND_COLUMNS

USER_IND_COLUMNS

Queste viste descrivono le colonne degli indici nelle tabelle. Alcune colonne in queste viste contengono statistiche generate dal pacchetto DBMS_STATS o dall'istruzione ANALYZE.
DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS

USER_IND_EXPRESSIONS

Queste viste descrivono le espressioni degli indici basati su funzioni sulle tabelle.
DBA_IND_STATISTICS ALL_IND_STATISTICS

USER_IND_STATISTICS

Queste viste contengono statistiche dell'ottimizzatore per gli indici.

come trovare gli indici su una tabella

set pagesize 50000 verify off echo off
col table_name head 'Table Name' format a20
col index_name head 'Index Name' format a25
col column_name head 'Column Name' format a30
break on table_name on index_name
select     table_name, index_name, column_name
from all_ind_columns
where table_name like upper('&Table_Name')
order by table_name, index_name, column_position
/

Come determinare la dimensione dell'indice

Size of INDEX

select segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from user_segments where segment_name='INDEX_NAME' group by segment_name;

OR
select owner,segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_name='INDEX_NAME' group by owner,segment_name;

 

List of Size of all INDEXES of a USER
select segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from user_segments where segment_type='INDEX' group by segment_name order by "SIZE in GB" desc;

OR

select owner,segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='INDEX' group by owner,segment_name order by "SIZE in GB" desc;

Sum of sizes of all indexes

select owner,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='INDEX' group by owner;

Come determinare l'Indice  definizione

set long 4000
select dbms_metadata.get_ddl('INDEX','<INDEX Name>','<INDEX OWNER') from dual;

Come determinare le statistiche dell'Indice

set pages 250
set linesize 100
set verify off
col table_name format a24 heading 'TABLE NAME'
col index_name format a23 heading 'INDEX NAME'
col u format a1 heading 'U'
col blevel format 0 heading 'BL'
col leaf_blocks format 999990 heading 'LEAF|BLOCKS'
col distinct_keys format 9999990 heading 'DISTINCT|KEYS'
col avg_leaf_blocks_per_key format 9999990 heading 'LEAF|BLKS|/KEY'
col avg_data_blocks_per_key format 9999990 heading 'DATA|BLKS|/KEY'
rem
break on table_name
rem
select table_name, index_name,
decode( uniqueness, 'UNIQUE', 'U', null ) u,
blevel, leaf_blocks, distinct_keys,
avg_leaf_blocks_per_key, avg_data_blocks_per_key
from sys.dba_indexes
where table_owner like upper('&owner')
and table_name like upper('&table')
order by table_owner, table_name, index_name;

 Articoli correlati

tabelle esterne in Oracle:dai un'occhiata a questo post per informazioni sull'utilizzo delle tabelle esterne in Oracle con un esempio, come creare una tabella esterna, come usarla
Oracle Create table:le tabelle sono l'unità di base dei dati archiviazione in un database Oracle. descriviamo come utilizzare il comando Oracle create table per creare una tabella con una chiave esterna/chiave primaria
istruzione Oracle create tablespace:questo articolo su come creare tablespace in Oracle, varie caratteristiche ad esso associate e diverse istruzioni create tablespace
Trova lo stato degli indici e le colonne assegnate a una tabella
Indice virtuale in Oracle:cos'è l'indice virtuale in Oracle? Usi, limitazioni, vantaggi e modalità di utilizzo per verificare per spiegare il piano nel database Oracle, parametro nascosto _USE_NOSEGMENT_INDEXES
Oracle Index clustering factor:come viene calcolato il fattore di clustering Oracle Index e come influisce sul piano di spiegazione
Oracle Partition Indice :Comprensione dell'indice di partizione Oracle, Che cos'è l'indice globale non partizionato?, Che cos'è l'indice locale con prefisso, l'indice locale senza prefisso

Corsi consigliati

Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque voglia essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento di sviluppo Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql