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

CREATE INDEX

CREATE INDEX ( tabela : Table ; arrayCampos : Pointer array ; tipoIndice : Integer ; nomeIndice : Text {; *} )

ParâmetroTipoDescrição
tabelaTable→Tabela para qual criar um índice
arrayCamposPointer array→Ponteiros aos campos a serem indexados
tipoIndiceInteger→Tipo de índice a criar: -1 = Palavra chave, 0 = padrão, 1 = B-Tree padrão, 3 = Cluster B-Tree, 4 = Cosine, 5 = Dot, 6 = Euclidean
nomeIndiceText→Nome de Índice a criar
*Operador→Se passado = índice assincrônico
Histórico
VersãoAlterações
21 R5Suporte para índices vetoriais Cosine, Dot, Euclidean
11 SQLCriado por

Descrição​

O comando CREATE INDEX cria um índice padrão em um ou mais campos (índice composto) ou um índice de palavras chaves em um único 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:

ConstanteTipoValorComentário
Cluster BTree IndexInteiro longo3Índice do tipo B-Tree usando clusters. Este tipo de índice é otimizado quando o índice contém poucas palavras-chave, ou seja, quando os mesmos valores ocorrem frequentemente nos dados.
Default Index TypeInteiro longo04D especifica o tipo de índice (excluindo índices de palavras-chave) que é o mais otimizado de acordo com o conteúdo do campo.
Keywords IndexInteiro longo-1Permite indexação palavra por palavra do conteúdo do campo. Este tipo de índice só pode ser usado com campos do tipo Text, Alpha ou Picture. Aviso: índices de palavras-chave não podem ser compostos.
Standard BTree IndexInteiro longo1Índice padrão do tipo B-Tree. Este tipo de índice multiuso é utilizado em versões anteriores do 4D
Vector cosine indexInteiro longo4Índice otimizado para consultas de IA usando cosine similarity
Vector dot indexInteiro longo5Índice otimizado para consultas de IA usando dot similarity
Vector euclidean indexInteiro longo6Índice otimizado para consultas de IA usando euclidean distance
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")

Exemplo 4​

Criação de um índice vetorial no campo "embedding" da tabela "Clientes":


ARRAY POINTER(fieldPtrArr; 1)
fieldPtrArr{1}:=->[Clientes]embedding
CREATE INDEX([Clientes]; fieldPtrArr; Vector cosine index; "cosine")


Ver também​

DELETE INDEX
RESUME INDEXES
SET INDEX

Propriedades​

Número do comando966
Thread-seguroyes