Crear índices online

23/01/2016

Para crear un índice mientras otros usuarios están accediendo a la tabla, podemos utilizar la cláusula ONLINE de la sentencia CREATE INDEX.

Por defecto, al crear un indice el servidor bloquea la tabla en modo exclusivo para impedir que otros usuarios accedan a la tabla mientras se crea el índice. La creación del índice falla si otro usuario bloquean la tabla o acceden a la misma incluso con nivel de aislamiento de Dirty Read.

No será hasta que se cree completamente el indice ONLINE cuando estará disponible para al optimizador y se podrán lanzar operaciones DDL sobre la tabla indexada. En este momento el servidor bloqueará momentáneamante la tabla para actualizar el catálogo con información del índice.

Antes de que se pueda crear un índice ONLINE sobre una tabla con una primary key , se debe esperar a que todas las operaciones DML sobre tablas relacionadas con ella mediante foreign key terminen.

Ejemplo:

CREATE UNIQUE INDEX IF NOT EXISTS idx_1 ON customer(lname) ONLINE;