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.

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>
  ( <col_name>
      [ , <col_name> ] ) ON <table_name>
Copy

Parâmetros

index_name

Especifica o identificador do novo índice. O nome deve ser exclusivo para a tabela híbrida para a qual o índice é criado. Nenhum outro índice secundário com o mesmo nome ou no 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 da tabela híbrida. Todos os requisitos para colunas de índice definidos na criação da tabela se aplicam aos identificadores de colunas.

Notas de uso

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

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

  • Você deve escolher um nome exclusivo para cada novo índice de uma determinada tabela híbrida.

  • Ao escolher as colunas para o novo índice, observe que uma tabela híbrida não pode conter dois índices secundários definidos no mesmo conjunto ordenado de colunas.

  • Alguns tipos de colunas (por exemplo, VARIANT) não são permitidos em um índice secundário.

  • 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 é permitida a qualquer momento.

  • Você pode 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 descartar e recriar o índice.

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

  • Você pode reconstruir um índice não ativo, cujo status seja SUSPENDED, BUILD FAILURE ou BUILD IN PROGRESS, usando DROP INDEX e CREATE INDEX.

  • Se quiser descartar uma coluna que faz parte de um índice que está sendo construído, primeiro você precisará interromper a construção do índice descartando o índice e, em seguida, descartando a coluna. Se você tentar descartar a coluna antes de descartar o índice, receberá esta mensagem de erro: Column '<nome_da_coluna>' cannot be dropped because it is used by index '<nome-do-índice>'.

  • A criação do índice online não progredirá até que todas as transações ativas com DMLs na mesma tabela no momento em que a 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 iniciaram a execução após a conclusão do comando CREATE INDEX, pode falhar e retornar este erro: DML não tinha conhecimento de DDL simultâneos. Tente fazer esta consulta novamente.

  • 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 definido como TRUE.

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

Exemplos

Os exemplos a seguir presumem que você já criou uma tabela híbrida e que ela contém alguns registros.

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

Você pode criar um índice na tabela usando o seguinte:

CREATE OR REPLACE INDEX vidx (val) ON mytable;
Copy

O comando retorna esta mensagem: BUILD IN PROGRESS O índice está sendo construído e registrará alterações de DML simultâneas na tabela base. O índice não será usado até que a construção seja concluída.

Se ocorrer uma falha enquanto a criação do índice estiver em andamento, o comando SHOW INDEXES indicará que a operação falhou: BUILD FAILURE Falha na criação do índice. Descarte o índice e recrie-o.

Se você decidir interromper a criação do índice, poderá usar um comando DROP INDEX:

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