sql >> Base de Datos >  >> RDS >> Oracle

cómo encontrar índices en una tabla en Oracle

Es muy común que desee encontrar el estado de los índices y las columnas asignadas para una tabla de Oracle
Y también en algún momento desea saber las columnas que están asignadas a los índices.
Las siguientes vistas serían útiles en estos casos y para encontrar índices en una tabla en 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

Cómo verificar el índice en la tabla en Oracle

Podemos usar la siguiente consulta sobre cómo verificar la columna de índice en la tabla en Oracle y cómo verificar el índice en la tabla en Oracle. Aquí está la consulta sobre cómo encontrar índices en una tabla en 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
/

cómo verificar el estado del índice en Oracle

Índice normal

SELECT owner, index_name, tablespace_name,status
FROM dba_indexes;

cómo verificar índices inutilizables en Oracle

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

Particiones de índice:

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

Si desea conocer las particiones ind inutilizables, entonces podemos usar la siguiente consulta

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

Subparticiones de índice:

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

Si desea conocer las subparticiones ind inutilizables, entonces podemos usar la siguiente consulta

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

Consulta para verificar el índice asociado con una restricción

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

Lista de todos los índices en un esquema

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

Consulta para encontrar las estadísticas de índice de la tabla

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
/

Consulta para encontrar la definición de columna de índice

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 introducido el concepto de índices parciales en la tabla particionada. La vista *_INDEXES se ha modificado para incluir una columna INDEXING, que indica si el índice es COMPLETO o PARCIAL.

Verifique el estado de indexación del índice.

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;

Artículos relacionados
Índice virtual en Oracle:¿Qué es el índice virtual en Oracle? Usos, limitaciones, ventajas y cómo utilizar para comprobar el plan de explicación en la base de datos de Oracle, parámetro oculto _USE_NOSEGMENT_INDEXES
Factor de agrupación en clústeres del índice de Oracle:cómo se calcula el factor de agrupación en clústeres del índice de Oracle y cómo afecta al plan de explicación
Tabla particionada de Oracle :¿QUÉ ES la tabla particionada de Oracle?, ¿Cómo mover el objeto existente a un objeto particionado?, Particionamiento para el rendimiento - Eliminación de particiones
Índice de partición de Oracle:comprensión del índice de partición de Oracle, ¿Qué son los índices globales no particionados?, ¿Qué es el prefijo local? índices, índice local sin prefijo
Tipos de índices en Oracle:esta página consta de información de índices de Oracle, diferentes tipos de índices en Oracle con ejemplos, cómo crear/eliminar/alterar el índice en Oracle

Espero que le guste esta compilación de consultas relacionadas con el índice de Oracle y le ayudará a encontrar respuestas a varias consultas, como cómo encontrar el índice en una tabla, enumerar todos los índices en el esquema, el estado del índice en una tabla y muchos más. Comparta conmigo qué más puedo agregar a esta lista para agregar más valor a esta publicación. Por favor, envíenme sus comentarios también

Leer también
Cómo enumerar todas las tablas en Oracle:podemos obtener la Lista de todas las tablas en Oracle consultando all_tables o user_tables o dba_tables. podemos seleccionar la columna y la cláusula where según la necesidad
Cómo verificar el tamaño de la tabla en Oracle:descubra la consulta para verificar el tamaño de la tabla en la base de datos Oracle, las diez tablas principales en un esquema particular o un espacio de tabla particular en Oracle
Cómo administrar los índices

Cursos recomendados

Aquí está el buen curso de Udemy para Oracle SQL
Oracle-Sql-Step-by-step:este curso cubre sql básico, uniones, creación de tablas y modificación de su estructura, creación de vista, unión, unión, todo y mucho más. . Un gran curso y un curso imprescindible para principiantes de SQL
El curso completo de certificación de Oracle SQL :Este es un buen curso para cualquier persona que quiera estar preparado para trabajar con habilidades de desarrollador de SQL. Un buen curso explicado
Oracle SQL Developer:fundamentos, consejos y trucos :muchos desarrolladores utilizan la herramienta de desarrollo Oracle Sql. Este curso nos brinda trucos y lecciones sobre cómo usarlo de manera efectiva y convertirnos en un desarrollador sql productivo
Oracle SQL Performance Tuning Masterclass 2020 :El ajuste del rendimiento es una de las habilidades críticas y más buscadas. Este es un buen curso para aprender sobre esto y comenzar a realizar ajustes de rendimiento de sql