martes, 17 de febrero de 2009

Índices

Indices

Como se crean los índices?

Automáticamente: un índice único es creado automáticamente cuando se define una restricción primary key o unique en la definición de una tabla.

Manualmente: los usuarios pueden crear índices no únicos sobre columnas para acelerar el tiempo de acceso a las filas.

Crear indices sobre una o más columnas

CREATE INDEX emp_ename_idx
ON emp(ename);

Guía para la creación de un índice:
La columna es usada frecuentemente en una cláusula WHERE o en una condición JOIN.
La columna tiene un rango muy amplio de valores.
La columna contiene un gran número de valores nulos.
Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición join.
La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas.

Verificación de índices:

SELECT ic.index_name, ic.column_name, ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = “EMP”;

Eliminación de un índice;

DROP INDEX emp_ename_idx;

Sequence

Create sequence

Defina una secuencia para generar números secuenciales automáticamente

CREATE SEQUENCE dept_deptno
Increment by 1
Start with 91
Maxvalue 100
Nocache
Nocycle;

Sequence es el nombre del generador de secuencia

Increment by n especifica el intervalo entre los números de la secuencia donde n es un entero. Si la cláusula es omitida, la secuencia se incrementará en 1.

Start with n especifica el valor máximo que la secuencia puede generar.

Maxvalue n especifica el valor máximo que la secuencia puede generar

Nomaxvalue especifica un valor máximo de 10^27 para una secuencia ascendente y -1 para una secuencia descendente .esta es la opción por defecto

Minvalue n especifica el valor mínimo de la secuencia.

Nominvalue especifica un valor mínimo de 1 para una secuencia ascendente y para una secuencia descendente. Esta es la opción por defecto

Cycle | nocycle especifica que la secuencia continua generando valores después de haber alcanzado su valor máximo o su valor mínimo, o bien no genera valore adicionales. La opción por defecto es NOCYCLE

Cache n | nocache especifica cuantos valores serán preasignados y mantenidos en la memoria del servidor oracle. Poro defecto, esta cantidad será igual a 20 valores.


Verificación de secuencias

SELECT sequence_name, min_value, max_value, increment_by, last_number
From user_sequences;

Modificación de una secuencia

Alter sequence dept_deptno
Increment by 1
Maxvalue 90
Nocache
Nocycle;

Eliminación de una secuencia:

Drop sequence dept_depto;

Nextval retorna el próximo valor disponible de la secuencia. Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios.

Ejemplo:

Insertar un nuevo departamento llamado “MARKETING” en san diego.

INSERT INTO dept(deptno, dname, loc)
VALUES (dept_deptno.NEXTVAL, ‘MARKETING’, ‘SAN DIEGO’);

check y constraints

CHECK

Comprueba que se cumpla una condición determinada al rellenar esa columna. Esta condición sólo debe estar construida con columnas de esta misma tabla.

CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99), ….

Eliminación de una constraint:

Alter table emp
Drop constraint nombre de la constriaint;

Otro ejemplo:

ALTER TABLE Dept
DROP PRIMARY KEY CASCADE;

Desactivar constraints:

Utilice la opción CASCADE para desactivar constraints dependientes.

Alter table emp
Disable constraint emp_empno_pk CASCADE;

Activar constraints:

Alter table emp
Enable constraint emp_empno_pk;