Tous les produits
Search
Centre de documentation

Tablestore:Créer un index secondaire

Dernière mise à jour :Oct 09, 2026

La fonctionnalité d'index secondaire vous permet d'interroger des données en vous basant sur la clé primaire d'une table de données et sur les colonnes d'index de l'index secondaire créé pour cette table. Si vous devez utiliser les colonnes d'attribut d'une table de données pour effectuer des requêtes, créez un index secondaire afin d'accélérer ces opérations. Lors de la création d'un index secondaire, définissez les colonnes d'index ou les colonnes d'attribut de cet index comme étant les colonnes prédéfinies spécifiées lors de la création de la table de données. Une fois l'index secondaire créé, utilisez-le pour interroger vos données.

Remarque
  • Les index secondaires se divisent en index secondaires globaux et index secondaires locaux. Pour plus d'informations sur cette fonctionnalité, consultez la rubrique Index secondaire.

  • Lors de la création d'une table de données via l'opération CreateTable, vous pouvez créer une ou plusieurs tables d'index. Pour en savoir plus, reportez-vous à la section Créer une table de données.

Prérequis

  • Une instance OTSClient est initialisée. Pour plus de détails, consultez la page Initialiser un client Tablestore.

  • Une table de données dont le paramètre max_versions est défini sur 1 a été créée. Le paramètre time_to_live de la table de données doit satisfaire à l'une des conditions suivantes :

    • Le paramètre time_to_live de la table de données est défini sur -1, ce qui signifie que les données de la table n'expirent jamais.

    • Le paramètre time_to_live de la table de données est défini sur une valeur différente de -1 et les opérations de mise à jour sur la table de données sont interdites.

  • Des colonnes prédéfinies sont spécifiées pour la table de données.

Description

Un index secondaire utilise un schéma de clé primaire différent, composé des colonnes de clé primaire et des colonnes prédéfinies d'une table de données, afin de fournir des dimensions de requête supplémentaires. Les index secondaires se classent en deux catégories : les index secondaires globaux et les index secondaires locaux. Ces deux types d'index présentent des modes de synchronisation des données et des exigences en matière de clé primaire distincts. Pour plus d'informations, consultez la rubrique Présentation.

Appelez la méthode createIndex pour créer un index secondaire pour une table de données existante. Pour créer un ou plusieurs index secondaires simultanément avec une table de données, configurez les schémas d'index dans la requête createTable. Pour en savoir plus, reportez-vous à la section Créer une table de données.

public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
        throws TableStoreException, ClientException

L'exemple de code suivant crée l'index secondaire global example_global_index pour la table example_table. L'index inclut les données existantes.

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

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

Opération 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)

Paramètres

Paramètre

Description

table_name

Nom de la table de données.

index_meta

Informations de schéma relatives à la table d'index. Ces informations comprennent les éléments suivants :

  • name : nom de la table d'index.

  • primary_key : clé primaire de la table d'index. La clé primaire est une combinaison de toutes les colonnes de clé primaire et d'un nombre aléatoire de colonnes prédéfinies de la table de données.

  • defined_column : colonnes d'attribut de la table d'index. Les colonnes d'attribut sont une combinaison de colonnes prédéfinies de la table de données.

  • index_update_mode : mode de mise à jour de la table d'index. Valeurs valides : IndexUpdateModeConst::ASYNC_INDEX et IndexUpdateModeConst::SYNC_INDEX.

    • Si vous ne spécifiez pas le paramètre index_update_mode ou si vous le définissez sur IndexUpdateModeConst::ASYNC_INDEX, le mode asynchrone est utilisé pour mettre à jour l'index.

      Si vous utilisez la fonctionnalité d'index secondaire global, vous devez définir le paramètre index_update_mode sur IndexUpdateModeConst::ASYNC_INDEX.

    • Si vous définissez le paramètre index_update_mode sur IndexUpdateModeConst::SYNC_INDEX, le mode synchrone est utilisé pour mettre à jour l'index.

      Si vous utilisez la fonctionnalité d'index secondaire local, vous devez définir le paramètre index_update_mode sur IndexUpdateModeConst::SYNC_INDEX.

  • index_type : type de la table d'index. Valeurs valides : IndexTypeConst::GLOBAL_INDEX et IndexTypeConst::LOCAL_INDEX.

    • Si vous ne spécifiez pas le paramètre index_type ou si vous le définissez sur IndexTypeConst::GLOBAL_INDEX, un index secondaire global est créé.

      Tablestore synchronise automatiquement les données des colonnes indexées et des colonnes de clé primaire de la table de données vers les colonnes de la table d'index que vous souhaitez créer, en mode asynchrone. La latence de synchronisation est de l'ordre de quelques millisecondes.

    • Si vous définissez le paramètre index_type sur IndexTypeConst::LOCAL_INDEX, un index secondaire local est créé.

      Tablestore synchronise automatiquement les données des colonnes indexées et des colonnes de clé primaire de la table de données vers les colonnes de la table d'index que vous souhaitez créer, en mode synchrone. Une fois les données écrites dans la table de données, vous pouvez immédiatement les interroger dans la table d'index.

include_base_data

Indique s'il faut inclure les données existantes de la table de données dans la table d'index. Valeur par défaut : false.

  • Si vous définissez le paramètre include_base_data sur true, les données existantes de la table de données sont incluses dans la table d'index.

  • Si vous ne spécifiez pas le paramètre include_base_data ou si vous le définissez sur false, les données existantes de la table de données ne sont pas incluses dans la table d'index.

Exemples

Créer un index secondaire global

Si vous ne spécifiez pas les paramètres index_type et index_update_mode lors de la création d'un index secondaire, un index secondaire global est créé par défaut.

$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);

Vous pouvez également spécifier explicitement les paramètres index_type et index_update_mode pour créer un index secondaire 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);

Créer un index secondaire local

L'exemple de code suivant illustre la création d'un index secondaire 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);

Références

  • Après avoir créé un index secondaire, utilisez-le pour lire une seule ligne de données ou des données dont les valeurs de clé primaire se situent dans une plage spécifique. Pour plus d'informations, consultez la rubrique Utiliser un index secondaire pour lire des données.

  • Supprimez un index secondaire dont vous n'avez plus besoin. Pour en savoir plus, reportez-vous à la section Supprimer un index secondaire.