martes, 10 de noviembre de 2015

New Features Oracle 12c :: Crear multiples indices en el mismo set de columnas ::

Hola gente,

Saludos a todos,

Varios amigos me han solicitado compartir un poco de mis largas lecturas de libros y exploración de productos Oracle. Mas aun, considerando que nunca les publique todo lo que pude investigar y aprendí de Oracle Times Ten.... queda pendiente!!!

Así que para compartir un poco he decidido comenzar a escribirles sobre los new features de Oracle database 12c.

Hablemos de: :: Crear multiples indices en el mismo set de columnas  :: 

Con Oracle 12c tenemos la opción de crear múltiples indices en el mismo set o listado de columnas. 

Para los que somos Oracle DBA's suena extraño eso, de hecho no se podía realizar en versiones anteriores, pero ya es posible realizarlo en 12c.

 Veamos un ejemplo:

CREATE TABLE alumnos
(
   alum_id     NUMBER,
   nombre      VARCHAR2 (150),
   apellido1   VARCHAR2 (150),
   apellido2   VARCHAR2 (150),
   ingreso     DATE,
   estado      CHAR (1)
);

 ---Primer indice
 CREATE INDEX idx_alumnos_01 ON alumnos (alumn_id, estado);

 --Tenemos que poner nuestro primer indice invisible para que podamos crear un segundo indice.
ALTER INDEX idx_alumnos_01 INVISIBLE

--Creación del segundo indice utilizando las mismas columnas y el mismo orden.
CREATE BITMAP INDEX idx_alumnos_bit_02 ON alumnos (alumn_id, estado);


Para que nos sirve esto?

Primero pensemos en disponibilidad. Tenemos la opción de "transformar" un indice B-Tree a Bitmap sin afectar nuestra operativa(posteriormente borraríamos el indice anterior y haríamos visible el nuevo indice). O supongamos que necesitamos tomar un indice no particionado y particionarlo sin afectar la operación.

También nos resulta genial, para evaluar cual de los tipos de indices nos brinda un mejor performance, mas considerando el enorme listado de tipos de indices que podemos crear: B-Tree, Index Organized Table, Unique, Reverse-Key, Key-Compressed, Descending, Bitmap, Bitmap Join, Function-Based, Indexed Virtual Columns, Virtual, Invisible, Global Partitioned, Local partitioned, Domain, B-tree cluster, Hash Cluster..... se me olvido algún otro?, creo que no.

Consideraciones:
Oracle les va a permitir esto siempre y cuando se cumplan las siguientes condiciones,

  • Los indices son de tipo diferente.
  • Los indices usan diferentes particiones.
  • Los indices tienen diferentes propiedades de unicidad.


Espero que la pequeña nota les sea de utilidad.

Saludos cordiales,

Miguel Vega