CREATE INDEX

Cria um novo índice secundário em uma tabela híbrida existente e preenche o índice com dados.

A criação de um índice é uma operação online (sem bloqueio). A tabela híbrida permanecerá disponível para instruções SELECT e DML enquanto o índice estiver sendo criado. No entanto, se a tabela híbrida não estiver em uso ativo e o tempo de inatividade não for um problema, é recomendável recriar a tabela híbrida com índices definidos. Consulte também Criação de tabelas híbridas.

Consulte também:

DROP INDEX , SHOW INDEXES , CREATE HYBRID TABLE , DROP TABLE , DESCRIBE TABLE , SHOW HYBRID TABLES

Sintaxe

CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
  ON <table_name>
    ( <col_name> [ , <col_name> , ... ] )
Copy

Parâmetros

index_name

Especifica o identificador do novo índice. Você deve especificar um nome exclusivo para cada novo índice em uma determinada tabela híbrida. Nenhum outro índice secundário com o mesmo nome ou o mesmo conjunto ordenado de colunas pode existir na tabela híbrida.

table_name

Especifica o nome de uma tabela híbrida existente que conterá o novo índice.

col_name

Especifica o nome de uma coluna existente na tabela híbrida. Todos os requisitos para colunas de índice definidos na criação da tabela se aplicam aos identificadores de colunas.

Uma tabela híbrida não pode conter dois índices secundários definidos no mesmo conjunto ordenado de colunas.

Colunas com tipos de dados geoespaciais (GEOGRAPHY e GEOMETRY), tipos de dados semiestruturados (ARRAY, OBJECT, VARIANT) e tipos de dados vetoriais (VECTOR) não são compatíveis com índices secundários.

Requisitos de controle de acesso

Para criar um índice, você deve usar uma função que tenha privilégio OWNERSHIP na tabela híbrida.

Notas de uso

  • O comando CREATE INDEX não pode ser usado para adicionar uma restrição de chave externa, primária ou exclusiva.

  • A criação de um novo índice não bloqueia simultaneamente outras cargas de trabalho. A tabela híbrida está disponível para instruções SELECT e DML simultâneas.

  • Somente uma operação de criação de índice ativo por tabela híbrida pode ser executada a qualquer momento.

  • É possível acompanhar o progresso da criação de um índice usando SHOW INDEXES. A coluna STATUS pode assumir os seguintes valores:

    • ACTIVE: o índice está completo e pode ser usado para recuperar dados.

    • SUSPENDED: o índice é atualizado apenas e não é usado para recuperar dados.

    • BUILD FAILURE: Ocorreu um erro no processo de criação do índice. Você precisa remover e recriar o índice.

    • BUILD IN PROGRESS: O índice está sendo criado e não é usado para recuperar dados.

  • É possível reconstruir um índice inativo, cujo status seja SUSPENDED, BUILD FAILURE ou BUILD IN PROGRESS, usando DROP INDEX e CREATE INDEX.

  • Se você quiser remover uma coluna que faz parte de um índice que está sendo criado, primeiro interrompa a criação do índice removendo o índice e, depois, remova a coluna. Se você tentar remover a coluna antes de remover o índice, receberá esta mensagem de erro:

    Column '<col_name>' cannot be dropped because it is used by index '<index-name>'.
    
  • As compilações de índice online não progridem até que todas as transações ativas com DMLs na mesma tabela no momento em que o instrução CREATE INDEX foi emitida sejam concluídas. Se alguma dessas transações permanecer inativa por mais de 5 minutos, ela será cancelada por padrão. Consulte Transações.

  • Durante o processo de construção do índice, qualquer DML realiza gravações no novo índice, mas não usa o índice para recuperar dados.

  • Um pequeno número de DMLs simultâneos, que começaram a ser executados após a conclusão do comando CREATE INDEX, pode falhar e retornar este erro:

    DML was unaware of concurrent DDL. Please retry this query.
    

    Se as instruções DML abortadas pertencerem a uma transação com múltiplas instruções, a transação será revertida somente se o parâmetro TRANSACTION_ABORT_ON_ERROR estiver definir como TRUE.

  • Um índice recém-criado será usado para recuperar dados somente quando o processo de criação de índice for concluído com sucesso e o status do índice for ACTIVE.

Exemplos

Para executar o exemplo com CREATE INDEX a seguir, primeiro crie e carregar a tabela híbrida.

CREATE OR REPLACE HYBRID TABLE mytable (
  pk INT PRIMARY KEY,
  val INT,
  val2 INT
);

INSERT INTO mytable SELECT seq, seq+100, seq+200
  FROM (SELECT seq8() seq FROM TABLE(GENERATOR(rowcount => 100)) v);
Copy

Agora você pode criar um índice na tabela.

CREATE OR REPLACE INDEX vidx ON mytable (val);
Copy
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+

Se ocorrer uma falha enquanto o índice estiver sendo construído, o comando SHOW INDEXES relatará o seguinte status:

BUILD FAILURE Index build failed. Please drop the index and re-create it.

Se você decidir interromper a criação de índice, use o comando DROP INDEX:

DROP INDEX mytable.vidx;
Copy
+-------------------------------------+
| status                              |
|-------------------------------------|
| Statement executed successfully.    |
+-------------------------------------+