En este artículo veremos cómo crear índice único usando CREATE UNIQUE INDEX en Oracle para mejorar la velocidad de la consultas y obtener los resultados más rápido. Si no conoces lo que es un índice puedes leer este otro artículo. Debes saber que un índice puede ser único o no único. Un índice único garantiza que no haya dos filas de una tabla con valores duplicados en la columna (o columnas) indexada. Un índice no único no impone esta restricción a los valores de la columna indexada. Si quieres crear un índice no único visita este enlace.
Sintaxis
La sintaxis para crear un índice es la siguiente:
CREATE UNIQUE INDEX nombreIndice ON
nombreTabla(columna1[,columna2,...]);
Crear un índice único
En el siguiente ejemplo creamos un indice 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';