Saltar al contenido principal
Versión: Siguiente

CREATE INDEX

CREATE INDEX ( tabla ; arrayCampos ; tipoIndice ; nombreIndice {; *} )

ParámetroTipoDescripción
tablaTableTabla para la cual crear un índice
arrayCamposPointer arrayPuntero(s) a el/los campo(s) a indexar
tipoIndiceIntegerTipo de índice a crear: -1 = Palabras claves, 0 = por defecto, 1 = B-Tree estándar, 3 = B-Tree cluster
nombreIndiceTextNombre del índice a crear
*OperadorSi pasa = indexación asincrónica

Descripción

El comando CREATE INDEX permite crear:

  • Un índice estándar en uno o más campos (índice compuesto) o
  • Un índice de palabras claves en un campo.

El índice se crea para la tabla laTabla utilizando uno o más campos designados por el array de punteros arrayCampos. Este array contiene una sola línea si quiere crear un índice simple y dos o más cuando quiere crear un índice compuesto (excepto en el caso de un índice de palabras claves). En el caso de los índices compuestos, el orden de los campos en el array es importante durante la construcción del índice.

El parámetro tipoIndice permite definir el tipo de índice a crear. Puede pasar una de las siguientes constantes, que se encuentran en el tema “Tipo de índice”:

ConstanteTipoValorComentario
Cluster BTree indexEntero largo3Índice de tipo B-Tree utilizando clusters. Este tipo de índice se optimiza cuando el índice contiene pocas palabras claves, es decir cuando los mismos valores se presentan con frecuencia en los datos.
Default index typeEntero largo04D define el tipo de índice (excepto los índices de palabras claves) que es el más optimizado en función del contenido del campo.
Keywords indexEntero largo-1Permite la indexación palabra por palabra del contenido del campo. Este tipo de índice sólo puede utilizarse con campos de tipo Texto, Alfa e Imagen. Atención los índices de palabras claves no pueden ser compuestos
Standard BTree indexEntero largo1Índice de tipo B-Tree clásico. Este tipo de índice multi propósito se utiliza en las versiones anteriores de 4D

Nota: un índice B-Tree asociado a un campo de tipo texto almacena como máximo los primeros 1024 caracteres del campo. Por lo tanto en este contexto, las búsquedas en las cadenas que contienen más de 1024 caracteres fallarán.

Pase en nomIndice el nombre del índice a crear. Es necesario dar nombres a los índices si varios índices de diferentes tipos pueden asociarse a un mismo campo y si prefiere poder borrarlos individualmente con la ayuda del comando DELETE INDEX. Si el índice nomIndice ya existe, el comando no hace nada.

El parámetro opcional *, cuando se pasa, permite efectuar la indexación en modo asincrónico. En este modo, el método original continua su ejecución después de la llamada del comando, sin importar si la indexación ha terminado o no.

Si el comando CREATE INDEX encuentra registros bloqueados, estos no se indexarán y el comando esperará a que se desbloqueen.

Si ocurre un problema durante la ejecución del comando (campo no indexable, intento de creación de un índice de palabras claves de más de un campo, etc.), se genera un error. Este error puede interceptarse utilizando un método de gestión de errores.

Nota para despliegue

Dado que este comando modifica la estructura de la base de datos, no puede utilizarse en el contexto de una aplicación empaquetada de sólo lectura (archivo .4dc instalado en la carpeta Archivos de programa o archivo .4dz).

Ejemplo 1

Creación de dos índices estándar en los campos “Apellido” y “Teléfono” de la tabla [Clientes]:

 ARRAY POINTER(arrayPtrCampo;1)
 fieldPtrArr{1}:=->[Clientes]Apellido
 CREATE INDEX([Clientes];arrayPtrCampo;Standard BTree Index;"CustLNameIdx")
 fieldPtrArr{1}:=->[Clientes]Telefono
 CREATE INDEX([Clientes];arrayPtrCampo;Standard BTree Index;"CustTelIdx")

Ejemplo 2

Creación de un índice de palabras claves en el campo “Observaciones” de la tabla [Clientes]:

 ARRAY POINTER(arrayPtrCampo;1)
 fieldPtrArr{1}:=->[Clientes]Observaciones
 CREATE INDEX([Clientes];arrayPtrCampo;Keywords Index;"CustObsIdx")

Ejemplo 3

Creación de un índice compuesto en los campos “Ciudad” y “CodigoPostal” de la tabla [Clientes]:

 ARRAY POINTER(arrayPtrCampo;2)
 fieldPtrArr{1}:=->[Clientes]Ciudad
 fieldPtrArr{2}:=->[Clientes]CodigoPostal
 CREATE INDEX([Clientes];arrayPtrCampo;Standard BTree Index;"CityZip")

Ver también

DELETE INDEX
RESUME INDEXES
SET INDEX