Cerrar

Enviar mensaje

twitter FaceBook You Tube Git Hub Docs.com Enviar email

Manual de SQL (Oracle SQL)

[4]
Creación de otros objetos con DDL

Publicidad

[4.1] índices

Los índices son objetos asociados a columnas de tablas que sirven para acelerar las operaciones de consulta y ordenación.

Se almacenan aparte de la tabla a la que hace referencia, lo que permite crearles y borrarles de forma independiente respecto a la tabla.

Lo que realizan es una estructura que permite mantener un determinado orden sobre los datos de una o más tablas. Esa estructura actúa, en la práctica, como una lista ordenada por la que el Sistema de Bases de Datos puede acceder para facilitar las tareas de búsqueda y ordenación de los datos.

Cada vez que se añade una nueva fila, los índices involucrados se actualizan a fin de que su información esté al día. De ahí que cuantos más índices haya, más le cuesta a Oracle añadir nuevos datos. Al final todo deriva en un compromiso que minimice el tiempo de búsqueda y consulta de los datos más importantes, pero sin implicar que al añadir datos la tarea requiera demasiado esfuerzo por parte de la base de datos.

La mayoría de los índices se crean de manera implícita, como consecuencia de las restricciones PRIMARY KEY, UNIQUE y FOREIGN KEY. Estas restricciones provocan la creación automática de índices.

[4.1.1]creación de índices

Aparte de los índices ímplicitos comentados anteriormente, se pueden crear índices de forma explícita. Éstos se crean para aquellos campos sobre los cuales se desea acelerar las operaciones de búsqueda y ordenación.

Sintaxis:

CREATE INDEX nombre
ON tabla (columna1 [,columna2...])

Ejemplo:

CREATE INDEX nombre_completo
ON clientes (apellido1, apellido2, nombre);

El ejemplo anterior crea un índice para los campos apellido1, apellido2 y nombre. Esto no es lo mismo que crear un índice para cada campo, este índice es efectivo cuando se buscan u ordenan clientes usando los tres campos (apellido1, apellido2, nombre) a la vez.

Se aconseja crear índices en campos que:

No se aconseja en campos que:

Los índices se pueden crear utilizando expresiones complejas:

CREATE INDEX nombre_complejo
ON clientes (UPPER(nombre));

Esos índices tienen sentido si en las consultas se utilizan exactamente esas expresiones.

[4.1.2]consultar lista de índices

Para ver la lista de índices en Oracle se utiliza la vista USER_INDEXES. Mientras que la vista USER_IND_COLUMNS Muestra la lista de columnas que forman parte de algún índice.

[4.1.3]borrar índices

La instrucción DROP INDEX seguida del nombre del índice permite eliminar el índice en cuestión.

[4.2] secuencias

Una secuencia sirve para generar automáticamente números distintos. Se utilizan para generar valores para campos que se utilizan como clave forzada (claves cuyo valor no interesa, sólo sirven para identificar los registros de una tabla). Es decir se utilizan en los identificadores de las tablas (campos que comienzan con la palabra id), siempre y cuando no importe qué número se asigna a cada fila.

Es una rutina interna de la base de datos la que realiza la función de generar un número distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas (lo cual es útil para tablas que proceden de relaciones de tipo ISA exclusivas, en las que entre dos tablas de este tipo, la clave de cada una no se puede repetir).

[4.2.1]creación de secuencias

Sintaxis:

CREATE SEQUENCE secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n| NOCACHE}]

Donde:

Ejemplo:

CREATE SEQUENCE numeroPlanta
INCREMENT 100
STARTS WITH 100
MAXVALUE 2000;

El código anterior, crea una secuencia que empieza en el número 100 y que irá incrementándose de 100 en 100 hasta el valor de 2000.

[4.2.2]ver lista de secuencias

La vista del diccionario de datos de Oracle USER_SEQUENCES muestra la lista de secuencias que posee el esquema actual. La columna LAST_NUMBER de esa vista muestra, para cada secuencia, cual será el siguiente número de secuencia disponible.

[4.2.3]uso de la secuencia

Los métodos NEXTVAL y CURRVAL se utilizan para obtener el siguiente número y el valor actual de la secuencia respectivamente. Ejemplo de uso en Oracle:

SELECT numeroPlanta.NEXTVAL FROM DUAL;

Eso muestra en pantalla el siguiente valor de la secuencia. Realmente NEXTVAL incrementa la secuencia y devuelve el valor actual. CURRVAL devuelve el valor de la secuencia, pero sin incrementar la misma.

Ambas funciones pueden ser utilizadas en:

No se puede utilizar (y siempre hay tentaciones para ello) como valor para la cláusula DEFAULT de un campo de tabla. Tampoco en las cláusulas GROUP BY, HAVING u ORDER BY de una consulta.

Su uso más habitual es como apoyo al comando INSERT. Por ejemplo:

INSERT INTO plantas(num, uso) 
VALUES(numeroPlanta.NEXTVAL, ‘Suites’);

[4.2.4]modificar secuencias

Se pueden modificar las secuencias, pero la modificación sólo puede afectar a los futuros valores de la secuencia, no a los ya utilizados. Sintaxis:

ALTER SEQUENCE secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]

[4.2.5]borrar secuencias

Lo hace el comando DROP SEQUENCE seguido del nombre de la secuencia a borrar.

[4.2.6]obtener la lista de secuencias

La vista USER_SEQUENCES permite observar la lista de secuencias del usuario.

[4.3] sinónimos

En Oracle, un sinónimo es un nombre alternativo que se asigna a un objeto cualquiera. Normalmente es un nombre menos descriptivo que el original a fin de facilitar la escritura del nombre del objeto en expresiones dentro del lenguaje SQL.

[4.3.1]creación de sinónimos

Sintaxis:

CREATE [PUBLIC] SYNONYM nombre FOR objeto;

objeto es el objeto al que se referirá el sinónimo. La cláusula PUBLIC hace que el sinónimo esté disponible para cualquier usuario (sólo se permite utilizar si disponemos de privilegios administrativos).

[4.3.2]borrado de sinónimos

Se realiza mediante este código:

DROP SYNONYM nombreSinónimo;

[4.3.3]obtener la lista de sinónimos

La vista USER_SYNONYMS permite observar la lista de sinónimos del usuario, la vista ALL_SYNONYMS permite mostrar la lista completa de sinónimos de todos los esquemas a los que tenemos acceso.