Crear índice único usando CREATE UNIQUE INDEX en Oracle

Crear índice único usando CREATE UNIQUE INDEX en Oracle es una técnica esencial para optimizar el rendimiento de las consultas en bases de datos. Los índices únicos no solo mejoran la velocidad de búsqueda, sino que también aseguran que no existan valores duplicados en las columnas indexadas. Esta restricción es clave para mantener la integridad de los datos en tablas críticas.

Un índice puede ser único o no único, y la diferencia radica en si se permite la duplicidad de valores en las columnas. Mientras que un índice único garantiza que cada valor sea único, los índices no únicos simplemente mejoran el rendimiento de las consultas sin imponer restricciones. Si necesitas crear un índice no único, visita este enlace.

En este artículo, primero te mostraré la sintaxis para crear un índice único con CREATE UNIQUE INDEX, y después veremos ejemplos prácticos que te ayudarán a implementar esta funcionalidad en tus proyectos.

Para más información, puedes consultar la documentación oficial de ORACLE.

Sintaxis

La sintaxis para crear un índice único en Oracle es la siguiente:

CREATE UNIQUE INDEX nombre_Indice ON 
nombre_Tabla(columna1[,columna2,...]);

Aquí:

  • nombre_indice es el nombre que le asignarás al índice.
  • nombre_tabla es la tabla sobre la que se aplicará el índice.
  • columna1, columna2, ... son las columnas que deseas incluir en el índice.

Crear un índice único

En el siguiente ejemplo creamos un índice por el campo nombre de la tabla empleados con el resto de opciones por defecto:

CREATE UNIQUE INDEX index_emp_nombre 
ON empleados(nombre);

Si quieres comprobar si se está utilizando el índice puedes ejecutar la siguiente consulta:

EXPLAIN PLAN FOR
SELECT * FROM empleados
WHERE nombre = 'Miguel Troyano';

Ejemplo completo

Copia y pega el siguiente código en tu consola de Oracle y realiza paso a paso leyendo los comentarios.

-- www.MiguelTroyano.com
-- Borramos la tabla si existe
drop table empleados;

-- Creamos la tabla
create table empleados
(
    id_empleado numeric(2,0),
    id_departamento numeric(2,0),
    nombre character varying(50),
    puesto character varying(50),
    fecha_alta date,
    sueldo integer
);

-- Insertamos valores
insert into empleados values (1,1,'Miguel Troyano','Analista',to_date('26/09/1986','DD/MM/YYYY'),60000);
insert into empleados values (2,1,'Ismael Troyano','Analista',to_date('01/01/2001','DD/MM/YYYY'),60000);
insert into empleados values (3,1,'Jose Troyano','Alta Dirección',to_date('01/01/2001','DD/MM/YYYY'),80000);
insert into empleados values (4,1,'Pilar Redondo','Alta Dirección',to_date('02/02/2002','DD/MM/YYYY'),80000);

-- Se crea un indice llamado index_emp_nombre
--por el campo nombre de la tabla empleados
CREATE UNIQUE INDEX index_emp_nombre 
ON empleados(nombre);

-- Mostramos si la consulta utiliza algún indice
EXPLAIN 
select * 
from empleados
where nombre = 'Miguel Troyano';

Escribir un comentario