Está en la página 1de 28

Os explicamos qué son los índices y cómo usarlos en Oracle Database.

Enumeramos los tipos


de índices y cómo crearlos. Mostramos cómo saber cuándo es necesario reindexar un índice en
Oracle y cómo hacerlo. Explicamos cómo cambiar de ubicación un índice ya creado.

 Definición de índice ¿qué es un índice? ¿para qué sirve? .


 Cómo crear índices en Oracle.
 Creación de un índice al crear una tabla de Oracle .
 Crear un índice en una tabla ya existente en Oracle .
 Cómo saber si un índice se está utilizando, monitorización del uso de índices en Oracle .
 Mostrar información de los índices de una tabla en Oracle .
 Mostrar todas las restricciones de una tabla de Oracle .
 Mostrar todos los índices de una tabla en Oracle .
 Obtener el tamaño ocupado por un índice de una tabla de Oracle .
 Reconstrucción de índices ¿cuándo es necesaria? ¿cómo hacerla?, parámetros de los índices en
Oracle.
 Reconstruir índices en Oracle.
 Cambiar los parámetros de configuración de un índice en Oracle .
 Cambiar la ubicación de un índice a otro tablespace .
 Cómo saber cuándo es necesaria la reindexación o reconstrucción de índices .
Definición de índice ¿qué es un índice? ¿para qué sirve?
El índice de una base de datos es una estructura de datos que mejora la velocidad de las
operaciones, permitiendo un rápido acceso a los registros de una tabla. Al aumentar
drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se
vayan a realizar búsquedas frecuentes.

El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos:


el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que
esté indexado, sólo hay que buscar en el índice de dicho elemento para, una vez encontrado,
devolver el registro que se encuentre en la posición marcada por el índice.

Los índices pueden ser creados usando una o más columnas, preparando la base de datos tanto
para búsquedas rápidas al azar como para ordenaciones eficientes de los registros.
Los índices son construidos sobre árboles B, B+, B* o sobre una mezcla de ellos, funciones de
cálculo u otros métodos.

El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de
almacenamiento de la tabla (puesto que los índices generalmente contienen solamente los
campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles
de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no
cabrían en ella. En una base de datos relacional un índice es una copia de parte de una tabla.

Cómo crear índices en Oracle


Creación de un índice al crear una tabla de Oracle
Para crear un índice en la creación de una tabla de Oracle podemos utilizar SQL*Plus
(herramienta de línea de comandos incluida con Oracle), se puede utilizar también Oracle
Enterprise Manager (modo gráfico) o una aplicación externa que permita acceso a Oracle,
como por ejemplo:

 AjpdSoft Administración Bases de Datos.


Abriremos esta aplicación e introduciremos los datos para la conexión (nombre de la base de
datos, nombre de usuario, contraseña, tipo de acceso):

Crearemos una tabla para el ejemplo de creación de índices ejecutando la siguiente consulta
SQL:
PgSQL
CREATE TABLE facturacion (<br>  codigo number(10) not null,<br>  fecha date
default sysdate,<br>  codigocliente number(10),<br>  nombrecliente
1
varchar(100),<br>  observacion varchar(2000),<br><strong>  constraint
pk_facturacion_codigo primary key (codigo)</strong><br>) tablespace USERS
Como se puede observar en la consulta SQL anterior, al añadir la línea:

PgSQL
1 constraint pk_facturacion_codigo primary key (codigo)
Estamos indicando a Oracle que cree la tabla «facturacion», con el campo «codigo» y que éste
sea clave primaria, por lo que creará un índice automáticamente para este campo. Esta es una
forma de crear índices, en la creación de la tabla:

Tras crear la tabla insertaremos algunos registros con la instrucción SQL:

PgSQL
1 insert into facturacion
2 (codigo, codigocliente, nombrecliente)
3 values (1, 50, 'AjpdSoft')
Puesto que hemos indicado que la columna «codigo» sea clave primaria, Oracle no permitirá
valores duplicados para esta columna, esta comprobación la realizará basándose en el índice
creado. Si intentamos agregar un nuevo registro con con el valor de «codigo» a «1» (que ya
existe) nos mostrará este error:

Con el texto: ORA-00001: restricción única (SYSTEM.PK_FACTURACION_CODIGO)


violada, indicando que la restricción única PK_FACTURACION_CODIGO no se ha cumplido
por lo que no dejará insertar el registro.
Insertaremos varios registros (cambiando el valor de «codigo»). Ejecutando la consulta SQL:

PgSQL
1 select * from facturacion
Podremos ver los registros insertados en la tabla «facturacion»:
Para ver el índice creado se puede utilizar esta consulta.
Crear un índice en una tabla ya existente en Oracle
La creación de un índice en Oracle se realiza mediante el comando create index. Cuando se
define una clave primaria o una columna unívoca (UNIQUE) durante la creación de una tabla o
su mantenimiento, Oracle creará automáticamente un índice de tipo UNIQUE que gestione
dicha restricción, como hemos indicado anteriormente. La sintaxis completa de create index es
la siguiente:
create [bitmap | unique] index nombre_indice on
nombre_tabla (nombre_columna [, nombre_columna2] …) [reverse];
 bitmap indica que se cree un índice de mapa de bits que permite crear índices en columnas con
muy pocos valores diferentes.
 unique indica que el valor de la o las columnas indexadas debe ser único, no puede haber
duplicidades.
 nombre_indice debe ser un nombre unívoco (no debe existir otro nombre de objeto en Oracle)
que siga los convenios de denominación de Oracle para nombrar columnas.
 nombre_tabla será el nombre de la tabla donde se creará el índice.
 nombre_columna (o columnas) será la columna de la tabla nombre_tabla en la que se creará el
índice. Se puede crear un índice para varias columnas.
 reverse indica a Oracle que invierta los bytes del valor indexado, lo que puede mejorar la
distribución del procesamiento y de los datos cuando se insertan muchos valores de datos
secuenciales.
Para crear un índice en Oracle podemos utilizar SQL*Plus (herramienta de línea de comandos
incluida con Oracle), se puede utilizar Oracle Enterprise Manager (modo gráfico) o una
aplicación externa que permita acceso a Oracle, como por ejemplo:

 AjpdSoft Administración Bases de Datos.


Abriremos esta aplicación e introduciremos los datos para la conexión (nombre de la base de
datos, nombre de usuario, contraseña, tipo de acceso):

Siguiendo con el ejemplo, añadiremos un índice normal para la columna «nombrecliente» de la


tabla «facturacion». Para ello ejecutaremos la siguiente consulta SQL:

PgSQL
create index IN_FACTURACION_NOMBRECLIENTE <br>on FACTURACION
1
(NOMBRECLIENTE)

Para ver el índice creado podemos ejecutar la siguiente consulta SQL (como indicamos aquí):
PgSQL
select index_name Nombre, index_type Tipo,<br>table_name Tabla, tablespace_name
1 Tablespace,<br>secondary Secundario<br>from all_indexes<br>where table_name =
'FACTURACION'

Para añadir un índice de tipo UNIQUE, obligando a que los valores del campo indexado sean
unívocos, no se puedan repetir en el campo de la tabla, ejecutaremos la siguiente sentencia
SQL:

PgSQL
create unique index IN_FACTURACION_COD_CODCLI_FE<br>on FACTURACION
1
(CODIGOCLIENTE, FECHA)

De esta forma Oracle no permitirá que haya dos registros en la tabla «facturacion» con el
mismo valor en los campos «codigocliente» y «fecha», es decir, sólo podrá añadirse una factura
por cliente y por día, un cliente no podrá tener dos facturas en un mismo día. Por ejemplo, si
insertamos este registro:
PgSQL
insert into facturacion<br>(codigo, codigocliente, fecha)<br>values (6900, 500,
1
to_date('31/12/2009', 'DD-MM-YYYY'))
Intentaremos insertar un segundo registro con el mismo valor en codigocliente y en fecha:

PgSQL
insert into facturacion<br>(codigo, codigocliente, fecha)<br>values (6910, 500,
1
to_date('31/12/2009', 'DD-MM-YYYY'))
Oracle detectará que se está intentando infringir una restricción única, por lo que mostrará el
siguiente mensaje de error y no dejará que se inserte el registro:

Con el texto: ORA-00001: restricción única


(SYSTEM.IN_FACTURACION_COD_CODCLI_FE) violada.
Cómo saber si un índice se está utilizando, monitorización del
uso de índices en Oracle
Para consultar las estadísticas sobre el uso de uno o varios índices de tablas de Oracle, en
primer lugar deberemos activar la monitorización del índice que queramos, para ello
utilizaremos el siguiente comando SQL:
PgSQL
1 alter index nombre_indice monitoring usage;
Por ejemplo, en nuestro caso, para monitorizar el
índice IN_FACTURACION_NOMBRECLIENTE:
PgSQL
1 alter index IN_FACTURACION_NOMBRECLIENTE monitoring usage;
Tras activar la monitorización, podremos ver si el índice ha sido usado ejecutando la siguiente
consulta SQL. En nuestro caso comprobaremos si han sido usado los índices monitorizados de
la tabla FACTURACION:

PgSQL
1 select *<br>from v$object_usage<br>where table_name = 'FACTURACION'

Mostrará un registro indicando los siguientes datos:

 INDEX_NAME: nombre del índice usado.

 TABLE_NAME: nombre de la tabla a la que pertenece el índice usado.

 MONITORING: estado de monitorización, si está activa mostrará «YES».

 USED: mostrará «NO» si aún no ha sido usado.

 START_MONITORING: fecha y hora de inicio de monitorización.

 END_MONITORING: fecha y hora de fin de monitorización.


Si insertamos algunos registros en la tabla FACTURACION y hacemos alguna consulta SQL
ordenando por «nombre_cliente» para que el índice sea usado podremos ver cómo cambia el
valor de USED en v$object_usage:

Para desactivar la monitorización ejecutaremos el siguiente comando SQL:

PgSQL
1 alter index nombre_indice nomonitoring usage;
En nuestro ejemplo:

PgSQL
1 alter index IN_FACTURACION_NOMBRECLIENTE nomonitoring usage
Ejecutando nuevamente la consulta:

PgSQL
1 select *<br>from v$object_usage<br>where table_name = 'FACTURACION'
Veremos que ha cambiado el valor de MONITORING a «NO» y ha añadido la fecha y hora a
END_MONITORING:
Mostrar información de los índices de una tabla en Oracle
Mostrar todas las restricciones de una tabla de Oracle
Para mostrar todas las restricciones de una tabla oracle (nombre de la restricción, nombre de la
tabla, columnas a las que afecta) ejecutaremos la siguiente consulta SQL:

PgSQL
select constraint_name Nombre, table_name Tabla,<br>substr(column_name, 1, 255)
1
Columnas<br>from all_cons_columns<br>where table_name = 'FACTURACION'

Mostrar todos los índices de una tabla en Oracle


La siguiente consulta SQL mostrará todos los índices de la tabla «FACTURACION» de Oracle
(nombre del índice, tipo de índice, nombre de la tabla, tablespace en el que se guarda, si es
secundario):
PgSQL
select index_name Nombre, index_type Tipo, <br>table_name Tabla, tablespace_name
1 Tablespace, <br>secondary Secundario<br>from all_indexes <br>where table_name =
'FACTURACION'

Obtener el tamaño ocupado por un índice de una tabla de


Oracle
La siguiente consulta SQL mostrará el tamaño en megabytes de un índice determinado, en
nuestro caso del índice PK_FACTURACION_CODIGO perteneciente a la tabla
FACTURACION y el campo CODIGO del ejemplo. La consulta SQL para mostrar el tamaño
ocupado por un índice es la siguiente:

PgSQL
select segment_name, sum(bytes)/1024/1024 MB<br>from dba_extents<br>where
1
segment_name = 'PK_FACTURACION_CODIGO'<br>group by segment_name
Reconstrucción de índices ¿cuándo es necesaria? ¿cómo
hacerla?, parámetros de los índices en Oracle
Reconstruir índices en Oracle
Oracle proporciona la capacidad de realizar una reconstrucción rápida de índices, que permite
crear de nuevo un índice sin necesidad de eliminar el índice existente. El índice actualmente
disponible se usa como origen de datos para el índice nuevo, en lugar de utilizar la tabla como
origen de datos. Durante la reconstrucción del índice pueden cambiarse los parámetros de
almacenamiento (storage) y la asignación del espacio de tablas (tablespace).

Para reconstruir un índice de una tabla utilizaremos la cláusula rebuild con el comando alter


index. Un ejemplo de reconstrucción de un índice en Oracle podría ser:
PgSQL
1 ALTER INDEX nombre_indice REBUILD;
Siguiendo nuestro ejemplo, para reindexar el índice PK_FACTURACION_CODIGO
ejecutaremos la siguiente instrucción SQL:

PgSQL
1 ALTER INDEX PK_FACTURACION_CODIGO REBUILD;
Ejecutaremos esta consulta desde Oracle Enterprise Manager, accediendo a la opción «Hoja de
Trabajo de SQL», desmarcaremos la opción «Permitir Sólo Sentencias SELECT», en
«Comandos SQL» introduciremos:

PgSQL
1 ALTER INDEX PK_FACTURACION_CODIGO REBUILD;
Y pulsaremos en «Ejecutar». Si todo es correcto nos devolverá en «Resultados»: SQL se ha
ejecutado correctamente.
Cambiar los parámetros de configuración de un índice en Oracle
Si queremos cambiar algún parámetro de configuración de algún índice, como el
almacenamiento (storage) o incluso el espacio de tablas (tablespace) podremos ejecutar la
siguiente instrucción SQL:
PgSQL
alter index nombre_indice rebuild<br>storage (initial 8M next 4M)<br>tablespace
1
nombre_tablespace;
Con la instrucción anterior se reconstruirá el índice «nombre_indice» asignándole un tamaño
inicial de extensión de 8MB y un tamaño para las siguientes extensiones de 4MB. El índice
«nombre_indice» será creado en el tablespace «nombre_tablespace». Por lo que esta
instrucción SQL servirá para cambiar de tablespace un índice (si así lo deseamos).
Cambiar la ubicación de un índice a otro tablespace en Oracle
Oracle recomienda que los índices sean almacenados en un tablespace que apunte a una unidad
física diferente a la de los tablespaces de los datos. A continuación explicamos cómo cambiar la
ubicación (tablespace) de un índice ya creado.
En primer lugar necesitaremos disponer de un tablespace para los índices, crearemos uno
accediendo a Oracle Enterprise Manager, pulsando en «Servidor» y en la sección
«Almacenamiento» pulsando en «Tablespaces». Nos mostrará los tablespaces actuales,
pulsaremos «Crear»:
O bien ejecutando una consulta SQL como la siguiente:
PgSQL
CREATE SMALLFILE TABLESPACE "TB_INDICES" DATAFILE 'F:\Oracle\indices\
1 f_tbindices.dbf' SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS
COMPARTIR:
 
 
CALIFICAR:

Anterior Instalar Oracle Database 11g Release 1 en Microsoft Windows 7

Siguiente Eliminar ficheros y vaciar papelera manualmente en Windows XP

SOBRE EL AUTOR
alonsojpd
Presidente y fundador de Proyecto A y AjpdSoft

ENTRADAS RELACIONADAS

Instalar Oracle Database 10g Express Edition XE en Linux Ubuntu 6.06


12/10/2006
Trabajando con MySQL MariaDB y Python
01/10/2021

Instalar y administrar Microsoft SQL Server 2008 Express SP1


08/30/2009
Instalar SQL Server 2017 Express en Windows Server 2012
características y limitaciones
06/03/2021

Comentar
Lo siento, debes estar conectado para publicar un comentario.
SESIÓN
Nombre de usuario: 
Contraseña: 
 Recordar mi contraseña
Acceder
VIDEOTUTORIALES

 Videotutorial| Recuperar portátil viejo aumentando su velocidad con SSD y RAM


 Vídeo | Modificar estilo visual CSS de sitio web WordPress permanentemente
 Vídeotutorial | Cómo hacer captura de pantalla a imagen con Xiaomi Mi6
 Videotutorial | Cómo hacer captura de pantalla screenshot con Huawei Ascend G630
 Videotutorial | Crear base datos Access con tablas relacionadas facturas, detalle, clientes

 Videotutorial | Reparar base de datos SQL Server corrupta que no arranca error 3456 Could not
redo log record

POST FOROS
 Ejecutar consulta en WSL de WMI Powershell [RESUELTO] por Varios
 Reiniciar apagar PC remoto en Windows por comando [RESUELTO] por Varios
 Error 1792 al iniciar servicio w32time en Windows [RESUELTO] por Varios
 Modificar DNS en Linux Ubuntu Server 20.0.4 [RESUELTO] por Varios

 Error al sincronizar hora en Windows Server 2022 [RESUELTO] por Varios


RESPUESTAS FOROS
 alonsojpd a las Ejecutar consulta en WSL de WMI Powershell [RESUELTO]
 Varios a las Reiniciar apagar PC remoto en Windows por comando [RESUELTO]
 alonsojpd a las Reiniciar apagar PC remoto en Windows por comando [RESUELTO]
 Varios a las Error 1792 al iniciar servicio w32time en Windows [RESUELTO]

 alonsojpd a las Error 1792 al iniciar servicio w32time en Windows [RESUELTO]

DESCARGAS

Código fuente R para tratamiento de ficheros de log de accesos y peticiones web

File Size6.50 KB
Downloads157
Descargar
Salida del comando pihole -up en Linux Debian y servidor DNS Pi-hole

File Size2.71 KB
Downloads37
Descargar
Archivo vsftpd.conf de configuración de vsftpd 3.0.3

File Size2.66 KB
Downloads97
Descargar
ProyectoA Validar Login WordPress Código Fuente en C#

File Size24.00 KB
Downloads60
Descargar
Fichero OVF original completo

File Size1.63 KB
Downloads81
Descargar

WIKI
 Sasser.C

ETIQUETAS

.NET   ACCESO   APLICACIÓN   BASE DE DATOS   BASES DE

DATOS   BORLAND   C#   CENTOS   CODE   C

SHARP   CÓDIGO   CÓDIGO

FUENTE   DATABASE   DELPHI   DELPHI

6   DESARROLLO   ERROR   ESX   ESXI   FUENTE   INSTALACIÓ


N   INSTALAR   INSTALL   JAVA   LINUX   MYSQL  

OPEN

SOURCE   ORACLE   PROGRAMA   PROGRAMACIÓN   RE

D   SEGURIDAD   SERVER   SERVIDOR   SISTEMA

OPERATIVO   SOURCE   SOURCE

CODE   UBUNTU   VIRTUAL   VIRTUALIZACIÓN   VISUAL

STUDIO   VMWARE   WEB   WINDOWS   WINDOWS SERVER

Artículos recientes
 Liberar espacio en disco ocupado por System Volume Information
 Eliminar partición de recuperación en Windows Server 2022 para extender partición principal
 Solución error datastore inaccesible cuando se llena en SAN NetApp y VMware ESXi
 Salir del modo arranque seguro Boot Manager
 Error arranque equipo Windows Server 2022 tras actualizaciones pantalla EFI Boot Manager
 Script batch para desinstalar software de forma automática y silenciosa
 Instalar Apache Tomcat 9 en Linux Debian 11
 Instalar firewall ufw en Linux Debian 11
 Instalar Java JRE JDK en Linux Debian 11

 Desplegar sistema de monitorización Pandora FMS en 5 minutos con Docker Compose en Linux Debian

Top descargas

Descarga de la IOS de Cisco para router C7200 c7200-advipservicesk9-mz.152-4.S5.bin

 33.06 MB  2153 descargas

ProyectoA Envío email TLS SSL v.1.6.8.69 con código fuente completo en Delphi 6

 895.48 KB  1309 descargas

Indy Internet Direct 10.0.52 source code para instalar en Delphi desde 4 a 8 .Net XE RAD
Studio C++Builder

 1.7 MB  985 descargas

Turbo Pascal 7.0

 201.85 KB  897 descargas


BDE Borland Database Engine 5.2

 3.99 MB  892 descargas

AjpdSoft Generador y Lector códigos QR Código Fuente VB Net

 781.69 KB  676 descargas

OpenSSL v1.0.2o i386 win32

 1 MB  672 descargas

Ejemplo contenido fichero my.ini de MySQL en instalación sobre Windows con AppServ en
unidad D

 5.13 KB  667 descargas

Driver/Controlador en formato ZIP con el XML y el VIB para VMware ESXi de NIC Realtek
RTL8168

 1.08 MB  616 descargas

Proyecto y aplicación web en Django de Python de sitio web completo para eliminar modificar
y crear contactos en BD MySQL MariaDB

También podría gustarte