Saltar para o conteúdo principal
Versão: Próximo

CREATE INDEX

CREATE INDEX ( tabela ; arrayCampos ; tipoIndice ; nomeIndice {; *} )

ParâmetroTipoDescrição
tabelaTableTabela para qual criar um índice
arrayCamposPointer arrayPonteiros aos campos a serem indexados
tipoIndiceIntegerTipo de índice a criar: -1 = Palavra chave, 0 = padrão, 1 = B-Tree padrão, 3 = Cluster B-Tree
nomeIndiceTextNome de Índice a criar
*OperadorSe passado = índice assincrônico

Descrição

O comando CREATE INDEX permite criar:

  • Um índice padrão em um ou mais campos (índice composto) ou
  • Um índice de palavras chaves em um campo. O índice é criado para a tabela minhaTabela utilizando um ou mais campos determinados pelo array de ponteiros arrayCampos. Este array contém apenas uma linha se quiser criar um índice simples e dois ou mais quando quiser criar um índice composto (exceto no caso de um índice de palavras chaves). No caso dos índices compostos, a ordem dos campos no array é importante durante a construção do índice.

O parâmetro tipoIndice permite definir o tipo de índice a criar. Pode passar uma das seguintes constantes, que se encontram no tema Tipo de Índice:

ConstanteTipoValor
Cluster BTree IndexInteiro longo3
Default Index TypeInteiro longo0
Keywords IndexInteiro longo-1
Standard BTree IndexInteiro longo1

Nota: um índice B-Tree associado a um campo de tipo texto armazena como máximo os primeiros 1024 caracteres do campo. Portanto nesse contexto, as pesquisas nas cadeias que contenham mais de 1024 caracteres falharão.

Passe em nomeIndice, o nome do índice a criar. É necessário dar nomes aos índices se vários índices de diferentes tipos podem associados a um mesmo campo e se preferir poder apagá-los individualmente com a ajuda do comando DELETE INDEX. Se o índice nomeIndice já existir, o comando não faz nada.

O parâmetro opcional *, quando for passado, permite realizar a indexação em modo assincrônico. Nesse modo, o método original continua sua execução depois da chamada do comando, sem importar se a indexação terminou ou não.

Se o comando CREATE INDEX encontrar registros bloqueados, estes não serão indexados e o comando esperará que sejam desbloqueados.

Se ocorrer um problema durante a execução do comando (campo não indexável, tentativa de criação de um índice de palavras chaves em mais de um campo, etc.), um erro é gerado. Este erro pode ser interceptado utilizando um método de gestão de erros.

Nota para lançamento

Dado que este comando modifica a estrutura do banco de dados, não pode ser utilizado no contexto de uma aplicação empacotada de apenas leitura (arquivo .4dc instalado na pasta Arquivos de programa ou arquivo .4dz).

Exemplo 1

Criação de dois índices padrão nos campos “Sobrenome” e “Telefone” da tabela [Clientes]:

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

Exemplo 2

Criação de um índice de palavras chaves no campo "Observações da tabela [Clientes]:

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

Exemplo 3

Criação de um índice composto nos campos “Cidade” e “CódigoPostal” da tabela [Clientes]:

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

Ver também

DELETE INDEX
RESUME INDEXES
SET INDEX

Propriedades

Número do comando966
Thread-seguro