Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So finden Sie Indizes für eine Tabelle in Oracle

Es ist sehr üblich, dass Sie Indexstatus und zugeordnete Spalten für eine Oracle-Tabelle finden möchten
Und manchmal möchten Sie auch wissen, welche Spalten den Indexen zugeordnet sind.
Folgende Ansichten wären in diesen Fällen hilfreich und Indizes für eine Tabelle in Oracle zu finden

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

Wie man den Index einer Tabelle in Oracle überprüft

Wir können die folgende Abfrage verwenden, um zu erfahren, wie die Indexspalte in der Tabelle in Oracle überprüft wird und wie der Index in der Tabelle in Oracle überprüft wird. Hier ist die Abfrage, wie man Indizes für eine Tabelle in Oracle findet

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
/

Wie man den Indexstatus in Oracle überprüft

Normaler Index

SELECT owner, index_name, tablespace_name,status
FROM dba_indexes;

wie man unbrauchbare Indizes in Oracle überprüft

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

Indexpartitionen:

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

Wenn Sie unbrauchbare Ind-Partitionen wissen möchten, können wir die folgende Abfrage verwenden

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

Unterpartitionen indizieren:

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

Wenn Sie unbrauchbare ind-Unterpartitionen wissen möchten, können wir die folgende Abfrage verwenden

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

Abfrage, um den mit einer Einschränkung verknüpften Index zu überprüfen

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

Alle Indizes in einem Schema auflisten

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

Abfrage, um die Indexstatistik für die Tabelle zu finden

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
/

Abfrage, um die Indexspaltendefinition zu finden

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
/

Mit 12c hat Oracle das Konzept der Partial-Indizes in partitionierten Tabellen eingeführt. Die *_INDEXES-Ansicht wurde so modifiziert, dass sie eine INDEXING-Spalte enthält, die angibt, ob der Index FULL oder PARTIAL ist.

Überprüfen Sie den Indizierungsstatus des Indexes.

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;

Verwandte Artikel
Virtual Index in Oracle :Was ist Virtual Index in Oracle? Verwendungen, Einschränkungen, Vorteile und Verwendung zum Überprüfen des Explain-Plans in der Oracle-Datenbank, versteckter Parameter _USE_NOSEGMENT_INDEXES
Oracle-Index-Clustering-Faktor:Wie der Oracle-Index-Clustering-Faktor berechnet wird und wie er sich auf den Explain-Plan auswirkt
Oracle Partitioned Table :WAS IST eine partitionierte Oracle-Tabelle?,Wie verschiebt man das vorhandene Objekt in ein partitioniertes Objekt?,Partitionierung für Leistung – Partitionsbereinigung
Oracle-Partitionsindex :Grundlegendes zum Oracle-Partitionsindex ,Was sind globale, nicht partitionierte Indizes?, Was ist ein lokaler Präfix Indizes, lokaler Index ohne Präfix
Arten von Indizes in Oracle:Diese Seite enthält Informationen zu Oracle-Indizes, verschiedene Arten von Indizes in Oracle mit Beispielen, wie man den Index in Oracle erstellt/löscht/ändert

Ich hoffe, Ihnen gefällt diese Zusammenstellung von Oracle-Index-bezogenen Abfragen und sie hilft bei der Suche nach Antworten auf verschiedene Abfragen, z. Bitte teilen Sie mir mit, was ich dieser Liste noch hinzufügen kann, um diesem Beitrag mehr Wert zu verleihen. Bitte geben Sie mir auch das Feedback

Auch lesen
Wie man alle Tabellen in Oracle auflistet:Wir können die Liste aller Tabellen in Oracle erhalten, indem wir entweder all_tables oder user_tables oder dba_tables abfragen. Wir können Spalte und Where-Klausel nach Bedarf auswählen
So überprüfen Sie die Tabellengröße in Oracle:Finden Sie die Abfrage heraus, um die Tabellengröße in der Oracle-Datenbank zu überprüfen, die zehn größten Tabellen in einem bestimmten Schema oder einen bestimmten Tablespace in Oracle
So verwalten Sie Indizes

Empfohlene Kurse

Hier ist der nette Udemy-Kurs für Oracle SQL
Oracle-Sql-Schritt-für-Schritt :Dieser Kurs behandelt grundlegendes SQL, Joins, Erstellen von Tabellen und Ändern ihrer Struktur, Erstellen von Ansichten, Union, Union -all und vieles mehr . Ein großartiger Kurs und ein Muss für SQL-Einsteiger
Der vollständige Oracle SQL-Zertifizierungskurs :Dies ist ein guter Kurs für alle, die für SQL-Entwicklerfähigkeiten einsatzbereit werden möchten. Ein gut erklärter Kurs
Oracle SQL Developer:Grundlagen, Tipps und Tricks :Das Oracle Sql-Entwicklertool wird von vielen Entwicklern verwendet. Dieser Kurs gibt uns Tricks und Lektionen, wie man es effektiv nutzt und ein produktiver SQL-Entwickler wird
Oracle SQL Performance Tuning Masterclass 2020 :Leistungsoptimierung ist eine der kritischsten und gefragtesten Fähigkeiten. Dies ist ein guter Kurs, um mehr darüber zu erfahren und mit der Optimierung der SQL-Leistung zu beginnen