Todos los productos
Search
Centro de documentos

Tablestore:Crear un índice secundario

Última actualización: Oct 09, 2026

La función de índice secundario permite consultar datos con base en la clave principal de una tabla de datos y en las columnas de índice del índice secundario creado para dicha tabla. Si necesita utilizar las columnas de atributo de una tabla de datos para consultar información, cree un índice secundario para acelerar las consultas. Al crear un índice secundario para una tabla de datos, puede establecer las columnas de índice o las columnas de atributo del índice secundario como las columnas predefinidas que especificó al crear la tabla de datos. Una vez creado el índice secundario, utilícelo para consultar los datos.

Nota
  • Los índices secundarios se clasifican en índices secundarios globales e índices secundarios locales. Para obtener más información sobre la función de índice secundario, consulte Overview.

  • Puede crear una o más tablas de índice al momento de crear una tabla de datos mediante la operación CreateTable. Para obtener más información, consulte Create data tables.

Requisitos previos

  • Se inicializó una instancia de OTSClient. Para obtener más información, consulte Initialize an OTSClient instance.

  • Se creó una tabla de datos con el parámetro maxVersions establecido en 1. El parámetro timeToLive de la tabla de datos debe cumplir una de a continuación condiciones:

    • El parámetro timeToLive de la tabla de datos está establecido en -1, lo que significa que los datos de la tabla nunca caducan.

    • El parámetro timeToLive de la tabla de datos tiene un valor distinto de -1 y las operaciones de actualización en la tabla están prohibidas.

  • Se especificaron las columnas predefinidas para la tabla de datos.

Descripción

Un índice secundario utiliza un esquema de clave principal diferente, compuesto por columnas de clave principal y columnas predefinidas de una tabla de datos, para proporcionar dimensiones de consulta adicionales. Los índices secundarios se clasifican en índices secundarios globales e índices secundarios locales. Ambos tipos de índice tienen distintos modos de sincronización de datos y requisitos de clave principal. Para obtener más información, consulte Overview.

Llame a createIndex para crear un índice secundario en una tabla de datos existente. Si desea crear uno o más índices secundarios junto con una tabla de datos, configure los esquemas de índice en la solicitud createTable. Para obtener más información, consulte Create a data table.

public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
        throws TableStoreException, ClientException

A continuación se muestra un código de ejemplo que crea el índice secundario global example_global_index para example_table. El índice incluye los datos 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);

Parámetros

Parámetro

Descripción

mainTableName

El nombre de la tabla de datos.

indexMeta

La información del esquema de la tabla de índice. Esta información contiene los siguientes elementos:

  • name: el nombre de la tabla de índice.

  • primaryKey: la clave principal de la tabla de índice. La clave principal es una combinación de todas las columnas de clave principal y un número arbitrario de columnas predefinidas de la tabla de datos.

    Si desea crear un índice secundario local, la primera columna de clave principal de la tabla de índice debe ser igual a la primera columna de clave principal de la tabla de datos.

  • definedColumn: las columnas de atributo de la tabla de índice. Las columnas de atributo son una combinación de columnas predefinidas de la tabla de datos.

  • includeBaseData: especifica si se incluyen los datos existentes de la tabla de datos en la tabla de índice.

    Si establece el parámetro includeBaseData en true, la tabla de índice incluye los datos existentes de la tabla de datos. Si lo establece en false, la tabla de índice no los incluye.

  • indexType: el tipo de tabla de índice. Valores válidos: IT_GLOBAL_INDEX y IT_LOCAL_INDEX.

    • Si no especifica el parámetro indexType o lo establece en IT_GLOBAL_INDEX, se crea un índice secundario global.

      Tablestore sincroniza automáticamente los datos de las columnas indexadas y de las columnas de clave principal de la tabla de datos hacia las columnas de la tabla de índice que desea crear. Esta sincronización se realiza en modo asíncrono y su latencia es de unos pocos milisegundos.

    • Si establece el parámetro indexType en IT_LOCAL_INDEX, se crea un índice secundario local.

      Tablestore sincroniza automáticamente los datos de las columnas indexadas y de las columnas de clave principal de la tabla de datos hacia las columnas de la tabla de índice que desea crear. Esta sincronización se realiza en modo síncrono. Después de escribir los datos en la tabla de datos, puede consultarlos inmediatamente en la tabla de índice.

  • indexUpdateMode: el modo de actualización de la tabla de índice. Valores válidos: IUM_ASYNC_INDEX y IUM_SYNC_INDEX.

    • Si no especifica el parámetro indexUpdateMode o lo establece en IUM_ASYNC_INDEX, se utiliza el modo asíncrono para actualizar el índice.

      Si utiliza la función de índice secundario global, debe establecer el parámetro indexUpdateMode en IUM_ASYNC_INDEX.

    • Si establece el parámetro indexUpdateMode en IUM_SYNC_INDEX, se utiliza el modo síncrono para actualizar el índice.

      Si utiliza la función de índice secundario local, debe establecer el parámetro indexUpdateMode en IUM_SYNC_INDEX.

Ejemplos

Crear un índice secundario global

A continuación se muestra un código de ejemplo para crear un índice secundario global que no incluye los datos existentes de la tabla de datos asociada. En este ejemplo, las columnas de clave principal de la tabla de datos son pk1 y pk2. La columna de clave principal y la columna de atributo especificadas para el índice secundario global son col1 y col2, respectivamente. Las columnas de clave principal de la tabla de índice están formadas por col1, pk1 y pk2. La columna de atributo de la tabla de índice es col2.

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // Specify the name of the data table. 
    indexMeta: {
        name: "<INDEX_NAME>", // Specify the name of the index table. 
        primaryKey: ["col1"], // Specify a primary key column for the index table. 
        definedColumn: ["col2"], // Specify an attribute column for the index table. 
        includeBaseData: false, // Specify that the index table does not include the existing data of the data table for which the index table is created. If you want to include the existing data of the data table in the index table, set the includeBaseData parameter to true. 
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_ASYNC_INDEX,// By default, the index update mode is asynchronous update (IUM_ASYNC_INDEX). 
        indexType: TableStore.IndexType.IT_GLOBAL_INDEX,// By default, the index type is global secondary index (IT_GLOBAL_INDEX). 
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Crear un índice secundario local

A continuación se muestra un código de ejemplo para crear un índice secundario local que no incluye los datos existentes de la tabla de datos asociada. En este ejemplo, las columnas de clave principal de la tabla de datos son pk1 y pk2. Las columnas de clave principal especificadas para el índice secundario local son col1 y pk1. La columna de atributo especificada para el índice secundario local es col2. Las columnas de clave principal de la tabla de índice están formadas por col1, pk1 y pk2. La columna de atributo de la tabla de índice es col2.

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // Specify the name of the data table. 
    indexMeta: {
        name: "<INDEX_TABLE>", // Specify the name of the index table. 
        primaryKey: ["pk1","col1"], // Specify primary key columns for 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. 
        definedColumn: ["col2"], // Specify an attribute column for the index table. 
        includeBaseData: false, // Specify that the index table does not include the existing data of the data table for which the index table is created. If you want to include the existing data of the data table in the index table, set the includeBaseData parameter to true. 
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX// Set the indexUpdateMode parameter to IUM_SYNC_INDEX, which indicates that the index is updated in synchronous mode. If you set the indexType parameter to IT_LOCAL_INDEX, you must set the indexUpdateMode parameter to IUM_SYNC_INDEX. 
        indexType: TableStore.IndexType.IT_LOCAL_INDEX, // Set the indexType parameter to IT_LOCAL_INDEX, which indicates a local secondary index. 
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Referencias

  • Después de crear un índice secundario, puede utilizarlo para leer una sola fila de datos o bien datos cuyos valores de clave principal se encuentren dentro de un rango específico. Para obtener más información, consulte Use a secondary index to read data.

  • Puede eliminar un índice secundario que ya no utilice. Para obtener más información, consulte Delete a secondary index.