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';