Todos os produtos
Search
Central de documentação

Tablestore:Criar um índice secundário

Última atualização: Jul 03, 2026

O recurso de índice secundário permite consultar dados com base na chave primária de uma tabela de dados e nas colunas de índice do índice secundário criado para essa tabela. Se você precisar usar as colunas de atributo de uma tabela de dados para consultar informações, crie um índice secundário para acelerar as consultas. Ao criar esse índice, defina as colunas de índice ou as colunas de atributo do índice secundário como as colunas predefinidas especificadas durante a criação da tabela de dados.

Nota
  • Os índices secundários classificam-se em globais e locais. Para obter mais informações sobre o recurso de índice secundário, consulte Índice secundário.

  • Você pode criar uma ou mais tabelas de índice ao criar uma tabela de dados chamando a operação CreateTable. Para obter mais informações, consulte Criar uma tabela de dados.

Pré-requisitos

  • Uma instância OTSClient inicializada. Para obter mais informações, consulte Inicializar um cliente Tablestore.

  • Uma tabela de dados criada com o parâmetro MaxVersions definido como 1. O parâmetro TimeToLive da tabela de dados deve atender a uma das seguintes condições:

    • O parâmetro TimeToLive da tabela de dados está definido como -1, o que significa que os dados na tabela nunca expiram.

    • O parâmetro TimeToLive da tabela de dados está definido como um valor diferente de -1 e as operações de atualização na tabela são proibidas.

  • Colunas predefinidas especificadas para a tabela de dados.

Observações de uso

  • O nome da tabela de índice deve ser diferente do nome de qualquer tabela de séries temporais ou tabela de dados existente.

  • Ao criar um índice secundário, o Tablestore adiciona automaticamente as colunas de chave primária da tabela de dados não especificadas como colunas de índice ao índice secundário como colunas de chave primária deste.

  • Ao criar um índice secundário local, a primeira coluna de chave primária da tabela de índice deve ser igual à primeira coluna de chave primária da tabela de dados.

Parâmetros

Parâmetro

Descrição

MainTableName

O nome da tabela de dados.

IndexMeta

As informações de esquema da tabela de índice. As informações de esquema contêm os seguintes itens:

  • IndexName: o nome da tabela de índice.

  • PrimaryKey: a chave primária da tabela de índice. A chave primária é uma combinação de todas as colunas de chave primária e um número variável de colunas predefinidas da tabela de dados.

    Se você quiser criar um índice secundário local, a primeira coluna de chave primária da tabela de índice deve ser igual à primeira coluna de chave primária da tabela de dados.

  • DefinedColumns: as colunas de atributo da tabela de índice. As colunas de atributo são uma combinação de colunas predefinidas da tabela de dados.

  • IndexType: o tipo da tabela de índice. Valores válidos: IT_GLOBAL_INDEX e IT_LOCAL_INDEX.

    • Se você não especificar o parâmetro IndexType ou defini-lo como IT_GLOBAL_INDEX, um índice secundário global será criado.

      O Tablestore sincroniza automaticamente os dados das colunas indexadas e das colunas de chave primária da tabela de dados para as colunas da tabela de índice que você deseja criar no modo assíncrono. A latência de sincronização é de poucos milissegundos.

    • Se você definir o parâmetro IndexType como IT_LOCAL_INDEX, um índice secundário local será criado.

      O Tablestore sincroniza automaticamente os dados das colunas indexadas e das colunas de chave primária da tabela de dados para as colunas da tabela de índice que você deseja criar no modo síncrono. Após gravar os dados na tabela de dados, você pode consultar imediatamente os dados na tabela de índice.

IncludeBaseData

Especifica se os dados existentes da tabela de dados devem ser incluídos na tabela de índice.

Se você definir o parâmetro IncludeBaseData como true, a tabela de índice conterá os dados existentes da tabela de dados. Se você definir o parâmetro IncludeBaseData como false, a tabela de índice não conterá os dados existentes da tabela de dados.

Exemplos

Criar um índice secundário global

O código de exemplo a seguir mostra como criar um índice secundário global que inclui os dados existentes da tabela de dados para a qual o índice é criado. No exemplo, as colunas de chave primária da tabela de dados são pk1 e pk2. A coluna de chave primária e a coluna de atributo especificadas para o índice secundário global são definedcol1 e definedcol2, respectivamente. As colunas de chave primária da tabela de índice consistem em definedcol1, pk1 e pk2. A coluna de atributo da tabela de índice é definedcol2.

func CreateGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) {
    // Specify the metadata of the index table. 
    indexMeta := new(tablestore.IndexMeta) 
    // Specify the definedcol1 column of the data table as the primary key column of the index table. 
    indexMeta.AddPrimaryKeyColumn("definedcol1") 
    // Specify the definedcol2 column of the data table as the attribute column of the index table. 
    indexMeta.AddDefinedColumn("definedcol2") 
    // Specify the name of the index table. 
    indexMeta.IndexName = "<INDEX_NAME>"
    indexReq := &tablestore.CreateIndexRequest{
        // Specify the data table for which you want to create the index table and apply the settings that you specified for the index table. 
        MainTableName:tableName, 
        IndexMeta: indexMeta,
        /**
          You can set the IncludeBaseData parameter to true to synchronize the existing data of the data table to the index table. This way, you can use the index table to query all data in the data table. 
          The amount of time required to synchronize the existing data of the data table to the index table varies based on the amount of data in the data table. 
        */ 
        IncludeBaseData: true, 
    }
     
    resp, err := client.CreateIndex(indexReq)
    if err != nil {
        fmt.Println("Failed to create table with error:", err)
    } else {
        fmt.Println("Create index finished", resp)
    }
}

Criar um índice secundário local

O código de exemplo a seguir mostra como criar um índice secundário local que inclui os dados existentes da tabela de dados para a qual o índice é criado. No exemplo, as colunas de chave primária da tabela de dados são pk1 e pk2. As colunas de chave primária especificadas para o índice secundário local são pk1 e definedcol1. A coluna de atributo especificada para o índice secundário local é definedcol2. As colunas de chave primária da tabela de índice consistem em pk1, definedcol1 e pk2. A coluna de atributo da tabela de índice é definedcol2.

func CreateGLocalIndexSample(client *tablestore.TableStoreClient, tableName string) {
    // Specify the metadata of the index table. 
    indexMeta := new(tablestore.IndexMeta) 
    // Set the first primary key column of the index table to the first primary key column of the data table. 
    indexMeta.AddPrimaryKeyColumn("pk1") 
    // Specify the definedcol1 column of the data table as the primary key column of the index table. 
    indexMeta.AddPrimaryKeyColumn("definedcol1") 
    // Specify the definedcol2 column of the data table as the attribute column of the index table. 
    indexMeta.AddDefinedColumn("definedcol2") 
    // Set the index type to IT_LOCAL_INDEX. 
    indexMeta.IndexType = tablestore.IT_LOCAL_INDEX 
    // Specify the name of the index table. 
    indexMeta.IndexName = "<INDEX_NAME>"
    indexReq := &tablestore.CreateIndexRequest{
        // Specify the data table for which you want to create the index table and apply the settings that you specified for the index table. 
        MainTableName:tableName, 
        IndexMeta: indexMeta,
        /**
          You can set the IncludeBaseData parameter to true to synchronize the existing data of the data table to the index table. This way, you can use the index table to query all data in the data table. 
          The amount of time required to synchronize the existing data of the data table to the index table varies based on the amount of data in the data table. 
        */
        IncludeBaseData: true, 
    }
      
    resp, err := client.CreateIndex(indexReq)
    if err != nil {
        fmt.Println("Failed to create table with error:", err)
    } else {
        fmt.Println("Create index finished", resp)
    }
}

Referências

  • Após criar um índice secundário, você pode usá-lo para ler uma única linha de dados ou dados cujos valores de chave primária estejam dentro de um intervalo específico. Para obter mais informações, consulte Usar um índice secundário para ler dados.

  • Você pode excluir um índice secundário que não utiliza mais. Para obter mais informações, consulte Excluir um índice secundário.