CREATE INDEX

Nombre

CREATE INDEX  --  Construir un �ndice secundario.

Synopsis

CREATE [ UNIQUE ] INDEX nombre_indice ON tabla
    [ USING nombre_acceso ] ( columna [ nombre_operador] [, ...] )
CREATE [ UNIQUE ] INDEX nombre_indice ON tabla
    [ USING nombre_acceso ] ( nombre_funcion( r">columnale> [, ... ]) nombre_operador )
  

Entradas

UNIQUE

Proboca que el sistema compruebe si existen valores duplicados en la tabla cuando se crea el �ndice (si ya existen datos) y cada vez que se a�aden datos. Los intentos de insertar o actualizar datos duplicados generar�n un error.

nombre_indice

El nombre del �ndice que se debe crear.

tabla

El nombre de la tabla para la que se quiere crear un �ndice.

nombre_acceso

El nombre del m�todo de acceso que se utilizar� para el �ndice. El m�todo de acceso de defecto es BTREE. Postgres proporciona tres m�todos de acceso para �ndices secundarios.

BTREE

una implementaci�n de los btrees de alta concurrencia de Lehman-Yao.

RTREE

Implementa rtrees est�ndar utilizando el algoritmo de partici�n cuadr�tica de Guttman.

HASH

Una implementaci�n de las dispersiones lineales de Litwin.

columna

El nombre de una columna de la tabla.

nombre_operador

Una clase de operadores asociada. Vea m�s abajo para obtener m�s detalles.

nombre_funci�n

Una funci�n definida por el usuario, que devuelve un valor que puede ser indexado.

Salidas

CREATE

El mensaje devuelto si el �ndice se ha creado con �xito.

ERROR: Cannot create index: 'index_name' already exists.

Se presenta este error si es imposible crear el �ndice.

Description

CREATE INDEX construye un �ndice nombre_indice en la tabla especificada.

Sugerencia

Los �ndices se utilizan principalmente para incrementar el rendimiento de una base de datos. Sin embargo, un uso inapropiado de los �ndices dar� lugar a una base de datos m�s lenta.

En la primera sintaxis mostrada antes, los campos claves para el �ndice se especifican como nombres de columna; una columna puede tener tambi�n una clase de operadores asociada. Una clase de operadores se utiliza para especificar los operadores que se utilizar�n para un �ndice particular. Por ejemplo, un �ndice btree sobre enteros de cuatro_bytes deber�a utilizar la clase int4_ops; esta clase de operadores incluye funciones de comparaci�n para enteros de cuatro_bytes. La clase de operadores de defecto es la apropiada para ese tipo de datos.

En la segunda sintaxis mostrada antes, se defin�a un �ndice como resultado de una funci�n definida por el usuario nombre_funcion aplicada a uno o m�s atributos de una �nica clase. Estos �ndices funcionales pueden utilizarse para conseguir un acceso r�pido a datos basados en operadores que normalmente requerir�an alg�n tipo de transformaci�n para aplicarlos a la base de datos.

Postgres proporciona m�todos de acceso btree, rtree y hash para los �ndices secundarios. El m�todo de acceso btree es una implementaci�n de los btrees de alta concurrencia de Lehman-Yao. El m�todo de acceso rtree implementa el algoritmo de partici�n cuadr�tica est�ndar de Guttman. El m�todo de acceso hash es una implementaci�n de las dispersiones lineales de Litwin. Mencionamos los algoritmos utilizados s�lamente para indicar que todos estos m�todos de acceso son completamente din�micos, y no necesitan ser optimizados peri�dicamente (como es el caso, por ejemplo, de los m�todos de acceso de hash est�tico).

Notas

El optimizador de consultas de Postgres considerar� que est� usando �ndices btree en un barrido, siempre que un atributo indexado est� involucrado en una comparaci�n que utilice uno de los siguientes: <, <=, =, >=, >

Ambas clases de caja (box) soportan �ndices en el tipo de datos caja (box) en Postgres. La diferencia entre ellas es que bigbox_ops escala coordenadas de caja hacia abajo, para impedir excepciones de punto flotante que se pudiesen producir en multiplicaciones, sumas y restas de coordenadas de punto flotante muy grandes. Si el campo al cual se unen sus rect�ngulos es de alrededor de 20.000 unidades cuadradas o mayor, deber�a usted utilizar bigbox_ops. La clase de operadores poly_ops soporta �ndices rtree en datos poligonales.

El optimizador de consultas de Postgres considerar� que est� utilizando un indice rtree siempre que un atributo indexado est� involucrado en una comparaci�n que utilice uno de los siguientes: <<, &<, &>, >>, @, ~=, &&

El optimizador de consultas de Postgres considerar� que est� utilizando un �ndice hash siempre que un atributo del �ndice est� involucrado en una comparaci�n que utilice el operador =.

Actualmente, s�lo el m�todo de acceso BTREE soporta �ndices multi-columna. Se pueden especificar hasta 7 claves.

Utilice DROP INDEX para eliminar un �ndice.

La clase de operadores int24_ops se puede utilizar para construir �ndices sobre datos int2, y realizar comparaciones contra datos int4 en cualificaciones de consultas. Similarmente, int42_ops soporta �ndices sobre datos int4 que deben ser comparados con datos int2 en las consultas.

La siguiente lista select devuelve todos los nombres de operador:

SELECT am.amname AS acc_name,
       opc.opcname AS ops_name,
       opr.oprname AS ops_comp
    FROM pg_am am, pg_amop amop,
         pg_opclass opc, pg_operator opr
    WHERE amop.amopid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY acc_name, ops_name, ops_comp
    

Usage

Para crear un �ndice en el campo t�tulo en la tabla pel�culas:

CREATE UNIQUE INDEX �ndice_t�tulo
    ON pel�culas (t�tulo);
  

Compatibilidad.

SQL92

CREATE INDEX es una extensi�n del lenguaje de Postgres.

No hay un comando CREATE INDEX en SQL92.