sábado, 19 de abril de 2014

TAREA4-SECUENCIA-INDICES-SYNONYM

SECUENCIA

Crea un objeto capaz de darnos números consecutivos únicos.
CREATE SEQUENCE secuencia
      INCREMENT BY n
      START WITH n
      {MAX VALUE n | NOMAXVALUE}
      {MIN VALUE N | NOMINVALUE}
      {CYCLE | NOCYCLE}
      {CACHE N | NOCACHE}
      {ORDER | NOORDER};
En realidad es un generador de identificadores únicos que no bloquea transacciones.

Es muy útil para generar primary keys.

EJEMPLO: crea una secuencia de nombre ID, que se utilizara para la clave primaria de tabla ALUMNO

CREATE SEQUENCE  ID
                INCREMENT BY 1    // se incrementara en 1
                START WITH 1        // se iniciara en 1
                NOMAXVALUE       // sin valor máximo o tope
    NOCYCLE                 // no cycle, no es un ciclo
                NOCACHE ;             // no cache, para no perder números


Si no nos gusta perder números usamos NOCACHE.
CREATE SEQUENCE ID MINVALUE 1 START WITH 1
    INCREMENT BY 1 NOCACHE;

Si nos interesa la velocidad:
CREATE SEQUENCE ID MINVALUE 1 START WITH 1
    INCREMENT BY 1 CACHE 20;

Así obtenemos el siguiente valor:
SELECT ID.NEXTVAL FROM DUAL;

NEXTVAL -------------> Siguiente numero en la secuencia
CURRVAL -------------> Ultimo numero generado

También podemos obtener el valor actual:
SELECT ID.CURRVAL FROM DUAL;


MODIFICAR SECUENCIA:

      Se modifica secuencia creada cambiando el incremento de 1 a 20 y valor máximo a 999999

alter sequence ID
increment by 20
maxvalue 999999
nocache
nocycle;

DONDE SE PUEDE USAR UNA SECUENCIA:

- Clausula VALUES de la instrucción INSERT
- Clausula SET de la instrucción UPDATE
- Clausula SELECT de la instrucción SELECT

DONDE NO SE PUEDE USAR:

- Clausulas DISTINCT, GROUP BY, ORDER BY, WHERE de la instrucción SELECT
- Valor por defecto de una columna
PARA ELIMINAR UNA SECUENCIA UTILIZAMOS EL COMANDO DROP:

- DROP SEQUENCE ID;


INDICES

Los índices se usan para mejorar el rendimiento de las operaciones sobre una tabla.
En general mejoran el rendimiento las SELECT y empeoran (mínimamente) el rendimiento de los INSERT y los DELETE.
Una vez creados no es necesario nada más, Oracle la usa cuando es posible

En Oracle existen tres tipos de índices:

1)Table Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON [esquema.]table_name [tbl_alias]
         (col [ASC | DESC]) index_clause index_attribs

2)Bitmap Join Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON [esquema.]table_name [tbl_alias]
         (col_expression [ASC | DESC])
            FROM [esquema.]table_name [tbl_alias]
               WHERE condition [index_clause] index_attribs

3)Cluster Index:
CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name
      ON CLUSTER [esquema.]cluster_name index_attribs             

las index_clauses posibles son:
LOCAL STORE IN (tablespace)

LOCAL STORE IN (tablespace)
  (PARTITION [partition
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause]
       [STORE IN {tablespace_name|DEFAULT]
       [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])


LOCAL (PARTITION [partition
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause]
       [STORE IN {tablespace_name|DEFAULT]
       [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

GLOBAL PARTITION BY RANGE (col_list)
   ( PARTITION partition VALUES LESS THAN (value_list)
       [LOGGING|NOLOGGING]
       [TABLESPACE {tablespace|DEFAULT}]
       [PCTFREE int]
       [PCTUSED int]
       [INITRANS int]
       [MAXTRANS int]
       [STORAGE storage_clause] )

INDEXTYPE IS indextype [PARALLEL int|NOPARALLEL] [PARAMETERS ('ODCI_Params')]

 {Esto es solo para table index, no para bitmap join Index}

Y además index_attribs puede ser cualquier combinación de los siguientes:
NOSORT|SORT
REVERSE
COMPRESS int
NOCOMPRESS
COMPUTE STATISTICS
[NO]LOGGING
ONLINE
TABLESPACE {tablespace|DEFAULT}
PCTFREE int
PCTUSED int
INITRANS int
MAXTRANS int
STORAGE storage_clause
PARALLEL parallel_clause

Si usamos la opcion PARALLEL esta debe estar al final.

create index es una de las pocas sentencias que pueden usar nologging option.

create index requiere un segmento temporal si no hay espacio en memoria suficiente.


Crear indices basados en funciones require que query_rewrite_enabled este a true y query_rewrite_integrity este a trusted.

Un ejemplo de indices basados en funciones para busquedas en mayusculas:
CREATE INDEX idx_case_ins ON my_table(UPPER(empname));

SELECT * FROM my_table WHERE UPPER(empname) = 'KARL';





SINONIMOS
Crea un sinónimo para algún objeto de la base de datos.
   CREATE [OR REPLACE] [PUBLIC] SYNONYM [esquema.]sinonimo
      FOR [esquema.]objeto [@dblink]

Con la opción 'PUBLIC' se crea un sinónimo público accesible a todos los usuarios, siempre que tengan los privilegios adecuados para el mismo.

Sirve para no tener que usar la notación 'esquema.objeto' para referirse a un objeto que no es propiedad de usuario.

Crea un nombre abreviado a la vista PROGRAMADOR.T_PEDIDOS:
CREATE PUBLIC SYNONYM T_PEDIDOS
FOR PROGRAMADOR.T_PEDIDOS;

No es necesario recompilarlos cuando se redefinen las tablas, de hecho puedes existir sin que exista el objeto al que referencian.

El acceso es un poco más eficiente cuando se accede por sinónimos públicos.
Cuando en una sentencia no citamos el nombre del esquema, Oracle resuelve los nombres en el siguiente orden:
·       usuario actual
·       private synonym
·       public synonym

También podemos usarlo para cambiar el objeto que usamos sin tener que cambiar la programación.

Así cambiamos la tabla:
CREATE PUBLIC SYNONYM T_PEDIDOS FOR PROGRAMADOR.T_PEDIDOS_PRUEBA;
Borrar un sinónimo:
DROP SYNONYM T_PEDIDOS;


No hay comentarios:

Publicar un comentario