Tous les produits
Search
Centre de documentation

PolarDB:Index secondaires globaux (GSI)

Dernière mise à jour :Aug 11, 2026

Les index standards sur les tables partitionnées sont locaux : ils ne couvrent que les données d'une seule partition. Par conséquent, les requêtes qui ne filtrent pas sur la clé de partition doivent analyser toutes les partitions, les résultats ne sont pas triés globalement et les contraintes d'unicité doivent inclure toutes les clés de partition. Les index secondaires globaux (GSI) lèvent ces restrictions en s'étendant à toutes les partitions, ce qui permet d'interroger efficacement n'importe quelle colonne et d'appliquer l'unicité sans inclure les clés de partition.

Pour utiliser cette fonctionnalité, accédez au Quota Center . Recherchez le quota via son Quota ID polardb_mysql_gsi , puis cliquez sur Apply dans la colonne Actions.

Pourquoi les index locaux présentent des limites

Un index local est partitionné de la même manière que sa table. Chaque partition d'index ne couvre que la partition de table correspondante ; ainsi, les données sont triées au sein de chaque partition, mais pas entre elles. Cette configuration engendre trois problèmes lorsque les requêtes n'incluent pas la clé de partition :

  • Analyses complètes des partitions : Toutes les partitions sont analysées, ce qui provoque une amplification des lectures qui augmente avec le nombre de partitions.

  • Absence d'ordre global garanti : Les résultats provenant de partitions triées ne sont pas triés globalement, ce qui peut déclencher une étape de tri supplémentaire.

  • Restriction des index uniques : Un index unique local doit inclure toutes les clés de partition pour garantir l'unicité entre les partitions.

Un GSI n'est pas partitionné. Il est construit à partir des données de toutes les partitions et est trié globalement. Un index globalement unique sur un GSI n'a pas besoin d'inclure toutes les clés de partition.

Quand utiliser un GSI

Scénario

Type d'index recommandé

Raison

Requêtes filtrant fréquemment sur des colonnes autres que la clé de partition

GSI

Évite les analyses complètes des partitions

Contraintes d'unicité globale sur des colonnes autres que la clé de partition

GSI

Les index uniques locaux nécessitent toutes les clés de partition

Archivage peu fréquent des partitions (par exemple, partitions mensuelles conservées pendant plusieurs années)

GSI

Meilleures performances de requête, moins de fragmentation des partitions

Requêtes limitées principalement à une seule partition

Index local

Frais d'écriture réduits

Versions prises en charge

Cette fonctionnalité nécessite un cluster PolarDB for MySQL exécutant la version 8.0.2, révision 8.0.2.2.7 ou ultérieure. Pour savoir comment vérifier la version de votre cluster, consultez la rubrique Interrogation du numéro de version.

Limitations

  • Les GSI sont pris en charge uniquement sur les tables partitionnées InnoDB. Les tables partitionnées hybrides ne sont pas prises en charge.

  • Un GSI ne peut pas être un index full-text ni un index spatial.

  • Les GSI ne sont pas pris en charge sur les tables compressées, temporaires ou chiffrées. Les tables utilisant le format de ligne REDUNDANT ou COMPRESSED ne sont pas non plus prises en charge.

  • Les tables dotées de GSI ne prennent pas en charge les colonnes générées.

  • Les opérations DDL au niveau des partitions — à l'exception de l'ajout, de la suppression de partitions RANGE ou LIST et du troncature des partitions — invalident les GSI existants. Vous devez supprimer et reconstruire tous les GSI de la table, ou utiliser la syntaxe UPDATE GLOBAL INDEX pour les reconstruire dans la même instruction.

    Remarque

    La suppression de partitions RANGE ou LIST et le troncature des partitions sans invalider les GSI constituent une fonctionnalité soumise à autorisation. Vous devez demander l'accès avant de pouvoir l'utiliser. Pour plus d'informations, consultez la section Améliorations des fonctionnalités.

Améliorations des fonctionnalités

  • Créez des GSI plus rapidement en utilisant le DDL parallèle.

  • Utilisez l'ajout instantané de colonne sur les tables partitionnées dotées de GSI.

  • Pour les tables partitionnées par RANGE ou LIST avec des GSI, les verrous de métadonnées (MDL) au niveau des partitions sont pris en charge lors de l'ajout de nouvelles partitions.

  • Convertir une table avec des GSI en une table partitionnée par INTERVAL RANGE, ou créer directement des GSI sur une table partitionnée par INTERVAL RANGE.

  • Lorsque vous effectuez des opérations DDL au niveau des partitions sur une table partitionnée dotée de GSI, utilisez la syntaxe UPDATE GLOBAL INDEX pour reconstruire les GSI dans la même instruction.

  • Vous pouvez supprimer des partitions RANGE ou LIST, ou tronquer des partitions de tout type, sans invalider les GSI existants. Il s'agit d'une fonctionnalité soumise à autorisation. Pour l'activer, accédez au Quota Center et recherchez l'Quota ID polardb_mysql_gsi_drop_partition ou polardb_mysql_gsi_truncate_part. Dans la colonne Actions, cliquez sur Apply pour activer la fonctionnalité.

    Remarque

    Cette fonctionnalité est prise en charge uniquement sur PolarDB for MySQL 8.0.2, révision 8.0.2.2.31 ou ultérieure.

  • Lorsque vous supprimez ou tronquez des partitions sur une table dotée de GSI, des données obsolètes peuvent subsister dans le GSI si vous ne le reconstruisez pas. Vous pouvez activer la fonctionnalité de purge asynchrone pour qu'un thread d'arrière-plan nettoie automatiquement les données obsolètes. Il s'agit d'une fonctionnalité soumise à autorisation. Pour l'activer, accédez au Quota Center et recherchez l'Quota ID polardb_mysql_gsi_async_purge. Dans la colonne Actions, cliquez sur Apply pour activer la fonctionnalité.

    Remarque

    Cette fonctionnalité est prise en charge uniquement sur PolarDB for MySQL 8.0.2, révision 8.0.2.2.35 ou ultérieure.

Syntaxe

Ajoutez le mot-clé GLOBAL ou LOCAL après le nom de l'index lors de la création d'un index.

Si vous omettez le mot-clé, un index local est créé par défaut.
-- Create a global index
INDEX index_name(column) GLOBAL

-- Create a local index
INDEX index_name(column) LOCAL

Créer un GSI

Créer un GSI inline avec la table

Ajoutez le mot-clé GLOBAL lors de la définition de l'index dans l'instruction CREATE TABLE :

CREATE TABLE t1(
  a INT PRIMARY KEY,
  b INT,
  INDEX k1(b) GLOBAL
) PARTITION BY HASH(a) PARTITIONS 3;

Ajouter un GSI à une table existante

Utilisez ALTER TABLE pour ajouter un index global, ou CREATE UNIQUE INDEX pour ajouter un index globalement unique :

-- Create the table
CREATE TABLE t1(
  a INT PRIMARY KEY,
  b INT
) PARTITION BY HASH(a) PARTITIONS 3;

-- Add a global index on column b
ALTER TABLE t1 ADD INDEX k1(b) GLOBAL;

-- Add a globally unique index on column b
CREATE UNIQUE INDEX k2 ON t1(b) GLOBAL;

Reconstruire un GSI lors d'une opération DDL de partition

Utilisez UPDATE GLOBAL INDEX pour reconstruire les GSI dans la même instruction qu'une opération DDL au niveau des partitions. Cela évite de laisser les GSI dans un état invalide.

L'exemple suivant crée une table partitionnée par RANGE avec un GSI, puis supprime une partition et reconstruit le GSI en une seule instruction :

-- Step 1: Create a range-partitioned table with a global index
CREATE TABLE t1(
  a INT PRIMARY KEY,
  b INT,
  INDEX k1(b) GLOBAL
) PARTITION BY RANGE (`a`)
(PARTITION p0 VALUES LESS THAN (5) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB);

-- Step 2: Drop the p1 partition and rebuild the GSI
ALTER TABLE t1 DROP PARTITION p1 UPDATE GLOBAL INDEX;

Performances

Les GSI offrent de meilleures performances que les index locaux pour les requêtes SELECT, UPDATE et DELETE qui n'incluent pas la clé de partition. L'avantage s'accroît à mesure que le nombre de partitions et le volume de données augmentent.

Configuration du test : Deux tables partitionnées par HASH avec 32 partitions et 1 000 000 de lignes chacune — l'une avec un index local, l'autre avec un GSI.

-- Table with local index
CREATE TABLE mytest1.big_table_1(
  a INT PRIMARY KEY,
  b INT,
  c INT,
  INDEX k1(b) LOCAL
) PARTITION BY HASH(a) PARTITIONS 32;

-- Table with GSI
CREATE TABLE mytest2.big_table_1(
  a INT PRIMARY KEY,
  b INT,
  c INT,
  INDEX k1(b) GLOBAL
) PARTITION BY HASH(a) PARTITIONS 32;

SELECT — temps d'exécution, la condition de requête n'inclut pas la clé de partition :

image

UPDATE — temps d'exécution, la condition de requête n'inclut pas la clé de partition :

image

DELETE — temps d'exécution, la condition de requête n'inclut pas la clé de partition :

image

L'avantage en termes de performances des GSI est plus prononcé à mesure que le volume de données et le nombre de partitions augmentent.

Étapes suivantes