Todos os produtos
Search
Central de documentação

Tablestore:Crie um índice secundário

Última atualização: Oct 09, 2026

O recurso de índice secundário permite consultar dados usando a chave primária da tabela e as colunas do índice secundário criado para ela. Para consultar dados usando colunas de atributo, crie um índice secundário na tabela e acelere as consultas. Ao criar o índice, defina suas colunas de índice ou de atributo como as colunas predefinidas da tabela. Depois de criado, use o índice secundário para consultar dados.

Nota
  • Os índices secundários são classificados em índices secundários globais e índices secundários locais. Para obter mais informações sobre o recurso de índice secundário, consulte Secondary index.

  • É possível criar uma ou mais tabelas de índice ao criar uma tabela de dados chamando a operação CreateTable. Para obter mais informações, consulte Create a data table.

Pré-requisitos

  • Inicialize uma instância do OTSClient. Para obter mais informações, consulte Initialize a Tablestore client.

  • Crie uma tabela de dados com o parâmetro max_versions definido como 1. O parâmetro time_to_live da tabela de dados deve atender a uma das seguintes condições:

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

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

  • Especifique colunas predefinidas para a tabela de dados.

Descrição

Um índice secundário usa um esquema de chave primária diferente, composto por colunas de chave primária e colunas predefinidas de uma tabela de dados, para fornecer dimensões de consulta adicionais. Os índices secundários são classificados em índices secundários globais e índices secundários locais. Os dois tipos de índice possuem modos de sincronização de dados e requisitos de chave primária diferentes. Para obter mais informações, consulte Overview.

Chame createIndex para criar um índice secundário para uma tabela de dados existente. Para criar um ou mais índices secundários junto com uma tabela de dados, configure os esquemas de índice na requisição createTable. Para obter mais informações, consulte Create a data table.

public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
        throws TableStoreException, ClientException

O código de exemplo a seguir cria o índice secundário global example_global_index para example_table. O índice inclui os dados existentes.

IndexMeta indexMeta = new IndexMeta("example_global_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");

CreateIndexRequest request =
        new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);

Operação de API

/**
 * Create a secondary index. 
 * @api
 *
 * @param [] $request
 *            The request parameter, which is the name of the data table. 
 * @return [] The response.
 * @throws OTSClientException The exception that is returned when a parameter error occurs or the Tablestore server returns a verification error. 
 * @throws OTSServerException The exception that is returned when the Tablestore server returns an error. 
 * @example "src/examples/CreateIndex.php"
 */
public function createIndex(array $request)

Parâmetros

Parâmetro

Descrição

table_name

O nome da tabela de dados.

index_meta

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

  • name: o nome da tabela de índice.

  • primary_key: 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.

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

  • index_update_mode: o modo de atualização da tabela de índice. Valores válidos: IndexUpdateModeConst::ASYNC_INDEX e IndexUpdateModeConst::SYNC_INDEX.

    • Se você não especificar o parâmetro index_update_mode ou definir o parâmetro index_update_mode como IndexUpdateModeConst::ASYNC_INDEX, o Tablestore atualiza o índice no modo assíncrono.

      Se você usar o recurso de índice secundário global, defina o parâmetro index_update_mode como IndexUpdateModeConst::ASYNC_INDEX.

    • Se você definir o parâmetro index_update_mode como IndexUpdateModeConst::SYNC_INDEX, o Tablestore atualiza o índice no modo síncrono.

      Se você usar o recurso de índice secundário local, defina o parâmetro index_update_mode como IndexUpdateModeConst::SYNC_INDEX.

  • index_type: o tipo da tabela de índice. Valores válidos: IndexTypeConst::GLOBAL_INDEX e IndexTypeConst::LOCAL_INDEX.

    • Se você não especificar o parâmetro index_type ou definir o parâmetro index_type como IndexTypeConst::GLOBAL_INDEX, o Tablestore cria um índice secundário global.

      O Tablestore sincroniza automaticamente os dados das colunas indexadas e das colunas de chave primária da tabela de dados para as colunas da nova tabela de índice em modo assíncrono. A latência de sincronização é de alguns milissegundos.

    • Se você definir o parâmetro index_type como IndexTypeConst::LOCAL_INDEX, o Tablestore cria um índice secundário local.

      O Tablestore sincroniza automaticamente os dados das colunas indexadas e das colunas de chave primária da tabela de dados para as colunas da nova tabela de índice em modo síncrono. Após gravar os dados na tabela de dados, consulte os dados na tabela de índice imediatamente.

include_base_data

Especifica se os dados existentes da tabela de dados devem ser incluídos na tabela de índice. Valor padrão: false.

  • Se você definir o parâmetro include_base_data como true, a tabela de índice inclui os dados existentes da tabela de dados.

  • Se você não especificar o parâmetro include_base_data ou definir o parâmetro include_base_data como false, a tabela de índice não inclui os dados existentes da tabela de dados.

Exemplos

Crie um índice secundário global

Se você não especificar os parâmetros index_type e index_update_mode ao criar um índice secundário, o Tablestore cria um índice secundário global.

$request = array(
    'table_name' => '<TABLE_NAME>', // Specify the name of the data table. 
    //'include_base_data' => true,  // Set the include_base_data parameter to true to include the existing data of the data table to the index table. 
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  // Specify the name of the index table. 
        'primary_key' => array('Col1'), // Specify the primary key column of the index table. 
        'defined_column' => array('Col2')  // Specify the attribute column of the index table. 
    )
);
$otsClient->createIndex($request);

Também é possível especificar os parâmetros index_type e index_update_mode para criar um índice secundário global.

$request = array(
    'table_name' => '<TABLE_NAME>', // Specify the name of the data table. 
    //'include_base_data' => true,  // Set the include_base_data parameter to true to include the existing data of the data table to the index table. 
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  // Specify the name of the index table. 
        'primary_key' => array('Col1'), // Specify the primary key column of the index table. 
        'defined_column' => array('Col2')  // Specify the attribute column of the index table. 
        'index_type' => IndexTypeConst::GLOBAL_INDEX,
        'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
    )
);
$otsClient->createIndex($request);

Crie um índice secundário local

O código de exemplo a seguir mostra como criar um índice secundário local:

$createLocalRequest = array (
   'table_name' => '<TABLE_NAME>', // Specify the name of the data table. 
    //'include_base_data' => true,  // Set the include_base_data parameter to true to include the existing data of the data table to the index table. 
   'index_meta' => array (
       'name' => '<INDEX_NAME>',  // Specify the name of the index table. 
       'primary_key' => array('PK0', 'Col1'), // Specify the primary key column of the index table. The first primary key column of the index table must be the same as the first primary key column of the data table. 
       'defined_column' => array('Col2')  // Specify the attribute column of the index table. 
       'index_type' => IndexTypeConst::LOCAL_INDEX,
       'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
   )
);
$otsClient->createIndex($createLocalRequest);

Referências

  • Após criar um índice secundário, use-o 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 Use a secondary index to read data.

  • Exclua um índice secundário que não seja mais utilizado. Para obter mais informações, consulte Delete a secondary index.