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

come trovare indici su una tabella in Oracle

È molto comune che tu voglia trovare lo stato degli indici e le colonne assegnate per una tabella Oracle
E a volte vuoi anche conoscere le colonne assegnate agli indici.
In questi casi sarebbe utile seguire le viste e per trovare indici su una tabella in Oracle

dba_ind_columns : This is to used if login with user having DBA role
all_ind_columns : This is to used if login with user having normal role
user_ind_columns : This is to used if login with user having normal role

Come controllare l'indice sulla tabella in Oracle

Possiamo usare la query seguente su come controllare la colonna dell'indice sulla tabella in Oracle e come controllare l'indice sulla tabella in Oracle. Ecco la query su come trovare indici su una tabella in Oracle

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 controllare lo stato dell'indice in Oracle

Indice normale

SELECT owner, index_name, tablespace_name,status
FROM dba_indexes;

come controllare gli indici inutilizzabili in Oracle

SELECT owner, index_name, tablespace_name,status
FROM dba_indexes
WHERE status = 'UNUSABLE';

Partizioni dell'indice:

SELECT index_owner, index_name, partition_name, tablespace_name,status
FROM dba_ind_PARTITIONS;

Se desideri conoscere le partizioni ind inutilizzabili, possiamo utilizzare la query di seguito

SELECT index_owner, index_name, partition_name, tablespace_name,status
FROM dba_ind_PARTITIONS
WHERE status = 'UNUSABLE';

Indicizzare le sottopartizioni:

SELECT index_owner, index_name, partition_name, subpartition_name, tablespace_name,status
FROM dba_ind_SUBPARTITIONS;

Se desideri conoscere le sottopartizioni ind inutilizzabili, possiamo utilizzare la query di seguito

SELECT index_owner, index_name, partition_name, subpartition_name, tablespace_name,status
FROM dba_ind_SUBPARTITIONS
WHERE status = 'UNUSABLE';

Query per verificare l'indice associato a un vincolo

SELECT index_name, table_name, uniqueness
  FROM DBA_INDEXES WHERE table_name = '&1';

Elenca tutti gli indici in uno schema

SELECT index_name, table_name, uniqueness
  FROM DBA_INDEXES WHERE owner = '&1';

Interroga per trovare le statistiche dell'indice per la tabella

set linesize 200
set pages 250
set verify off
col blevel format 99
col table_name format a22 heading 'TABLE NAME'
col u format a1 heading 'U'
col index_name format a25 heading 'INDEX NAME'
col column_name format a23 heading 'COLUMN NAME'
col column_position format 99 heading 'SEQ'
col column_length format 9999 heading 'LEN'
col leaf_blocks format 999990 heading 'LEAF|BLOCKS'
col distinct_keys format 9999990 heading 'DISTINCT|KEYS'
col avg_leaf_blocks_per_key format 999990 heading 'LEAF|BLKS|/KEY'
col avg_data_blocks_per_key format 999990 heading 'DATA|BLKS|/KEY'
rem
break on table_name skip 1 on index_name on u
rem
select i.table_name,i.blevel, i.leaf_blocks, i.distinct_keys,i.avg_leaf_blocks_per_key, i.avg_data_blocks_per_key,
       decode( i.uniqueness, 'NONUNIQUE', null, 'UNIQUE', 'U', 'BITMAP', 'B', '?' ) u,
       i.index_name,i.last_analyzed, c.column_position, c.column_name, c.column_length
  from sys.dba_ind_columns c, sys.dba_indexes i
 where (i.table_owner,i.table_name) in ('&1','&2')
   and i.owner = c.index_owner
   and i.index_name = c.index_name
 order by i.table_owner, i.table_name, i.index_name, c.column_position
/

Query per trovare la definizione della colonna dell'indice

ttitle 'Index Column Definitions'
rem
set linesize 100
set pages 250
set verify off
col table_name format a22 heading 'TABLE NAME'
col u format a1 heading 'U'
col index_name format a20 heading 'INDEX NAME'
col column_name format a25 heading 'COLUMN NAME'
col column_position format 99 heading 'SEQ'
col column_length format 999 heading 'LEN'
rem
break on table_name skip 1 on index_name on u
rem
select i.table_name,
       decode( i.uniqueness, 'NONUNIQUE', null, 'UNIQUE', 'U', 'BITMAP', 'B', '?' ) u,
       i.index_name, c.column_position, c.column_name, c.column_length
  from sys.dba_ind_columns c, sys.dba_indexes i
 where i.table_owner like upper('&owner')
   and i.table_name like upper('&table')
   and i.index_name like upper('&index')
   and c.column_name like upper('&column')
   and i.owner = c.index_owner
   and i.index_name = c.index_name
 order by i.table_owner, i.table_name, i.index_name, c.column_position
/

Con 12c, Oracle ha introdotto il concetto di indici parziali nella tabella partizionata. La vista *_INDEXES è stata modificata per includere una colonna INDEXING, che indica se l'indice è COMPLETO o PARZIALE.

Controlla lo stato di indicizzazione dell'indice.

SELECT index_name,
indexing
FROM dba_indexes
ORDER BY 1;

INDEX_NAME    INDEXING
------------------------- -------
EXP_INDEX_N1 PARTIAL

This happened when we have indexing partial tag in the create index statement.
CREATE INDEX EXP_INDEX_NI ON tab_name(col1) Local INDEXING PARTIAL;

Articoli correlati
Indice virtuale in Oracle:cos'è l'indice virtuale in Oracle? Usi, limitazioni, vantaggi e modalità di utilizzo per controllare il piano di spiegazione nel database Oracle, parametro nascosto _USE_NOSEGMENT_INDEXES
Fattore di clustering di Oracle Index:come viene calcolato il fattore di clustering di Oracle Index e come influisce sul piano di spiegazione
Tabella partizionata di Oracle :CHE COS'E' la tabella partizionata Oracle?,Come spostare l'oggetto esistente nell'oggetto partizionato?,Partizionamento per le prestazioni - Sfoltimento delle partizioni
Indice di partizione Oracle :Comprensione dell'indice di partizione Oracle ,Che cosa sono gli indici globali non partizionati?, Che cos'è il prefisso locale indici, indice locale senza prefisso
Tipi di indici in Oracle:questa pagina contiene informazioni sugli indici di Oracle, diversi tipi di indici in Oracle con esempio, come creare/eliminare/modificare l'indice in Oracle

Spero che questa raccolta di query relative all'indice di Oracle ti piaccia e ti aiuterà a trovare risposta a varie domande come come trovare l'indice su una tabella, elencare tutti gli indici nello schema, lo stato dell'indice su una tabella e molti altri. Per favore, condividi con me cos'altro posso aggiungere a questo elenco per aggiungere più valore a questo post. Per favore, forniscimi anche il feedback

Leggi anche
Come elencare tutte le tabelle in Oracle:possiamo ottenere l'elenco di tutte le tabelle in Oracle eseguendo query all_tables o user_tables o dba_tables. possiamo selezionare la colonna e la clausola where secondo la necessità
Come controllare la dimensione della tabella in Oracle:scopri la query per controllare la dimensione della tabella nel database Oracle, le prime dieci grandi tabelle in particolare schema o particolare tablespace in Oracle
Come gestire gli indici

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