Tous les produits
Search
Centre de documentation

AnalyticDB:Index JSON

Dernière mise à jour :Aug 10, 2026

Les index JSON permettent d'interroger des champs spécifiques au sein de colonnes JSON sans analyser l'intégralité de la table ni parcourir chaque document JSON. AnalyticDB for MySQL prend en charge deux types d'index pour les colonnes JSON : les index JSON pour les recherches par clé/valeur et les index de tableau JSON pour les requêtes d'appartenance à un tableau, à l'aide des fonctions JSON_CONTAINS et JSON_OVERLAPS.

Prérequis de version

Fonctionnalité Version minimale
Index JSON (création manuelle requise) V3.1.5.10
Index JSON sur une clé de propriété (column->'$.path') V3.1.6.8
Index de tableau JSON V3.1.10.6

Pour afficher ou mettre à jour la version mineure de votre cluster, accédez à la console AnalyticDB for MySQL, ouvrez la page Cluster Information et repérez la section Configuration Information.

Choisir le type d'index approprié

Type d'index Cas d'utilisation idéal Fonctions prises en charge
Index JSON Recherches exactes de clés/valeurs sur les propriétés d'objets
Index de tableau JSON Requêtes d'appartenance sur les tableaux JSON JSON_CONTAINS, JSON_OVERLAPS

Chaque index JSON ou index de tableau JSON couvre une seule colonne JSON. Pour indexer plusieurs colonnes, créez un index distinct pour chacune.

Remarques sur l'utilisation

  • Les index JSON et les index de tableau JSON ne peuvent être créés que sur des colonnes de type JSON.

  • Les index de tableau JSON prennent uniquement en charge les éléments numériques et les chaînes. Les tableaux et objets imbriqués ne peuvent pas être indexés.

  • Pour les clusters exécutant la version V3.1.5.10 ou ultérieure, les index JSON ne sont pas créés automatiquement lors de la création d'une table. Créez-les manuellement à l'aide de la syntaxe ci-dessous.

  • Pour les clusters exécutant des versions antérieures à V3.1.5.10, les index JSON sont créés automatiquement pour les colonnes JSON après la création de la table.

Activation de l'index après sa création (tables existantes)

Lorsque vous ajoutez un index JSON ou un index de tableau JSON à une table existante, le comportement d'activation dépend du moteur de stockage :

Type de table Activation
Tables XUANWU_V2 partitionnées et non partitionnées Prise d'effet immédiate. Aucune tâche BUILD n'est requise.
Tables XUANWU non partitionnées Prise d'effet après l'achèvement d'une tâche BUILD.
Tables XUANWU partitionnées Prise d'effet après l'achèvement d'une tâche BUILD exécutée sur l'ensemble de la table.

Créer un index JSON

Tous les exemples de cette section utilisent une table devices qui stocke la télémétrie des appareils au format JSON :

CREATE TABLE devices(
  id int,
  info json,
  ...
)
DISTRIBUTED BY HASH(id);

Une valeur info typique se présente comme suit :

{"device_id": "d-001", "status": "online", "tags": ["prod", "us-west"]}

Créer un index JSON lors de la création d'une table

Si vous spécifiez une ou plusieurs colonnes pour créer un index lors de la création d'une table, AnalyticDB for MySQL ne crée pas automatiquement d'index pour les autres colonnes de la table.

Syntaxe

CREATE TABLE table_name(
  column_name column_type,
  {INDEX|KEY} [index_name](column_name|column_name->'$.json_path')
)
DISTRIBUTED BY HASH(column_name)

La syntaxe column_name->'$.json_path' utilise la notation JSONPath : $ fait référence à la racine du document JSON, et .key permet d'accéder à une propriété d'objet. Ce paramètre nécessite la version V3.1.6.8 ou ultérieure.

Paramètres

Paramètre Description
index_name Nom de l'index. Il doit être unique au sein de la table.
column_name Nom de la colonne JSON à indexer. Crée un index sur l'ensemble du document JSON.
column_name->'$.json_path' Colonne JSON et clé de propriété spécifique. Chaque index couvre une seule clé de propriété.

Pour les autres paramètres de CREATE TABLE , consultez la documentation CREATE TABLE.

Important

Si une colonne JSON possède déjà un index, supprimez-le avant de créer un index sur une clé de propriété pour cette même colonne.

Exemples

Indexez l'intégralité de la colonne JSON info :

CREATE TABLE devices(
  id int,
  info json,
  index idx_info(info)
)
DISTRIBUTED BY HASH(id);

Indexez uniquement la clé de propriété status (nécessite la version V3.1.6.8 ou ultérieure) :

CREATE TABLE devices(
  id int,
  info json,
  index idx_info_status(info->'$.status')
)
DISTRIBUTED BY HASH(id);

Créer un index JSON sur une table existante

Syntaxe

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path',...)

Paramètres

Paramètre Description
db_name Nom de la base de données.
table_name Nom de la table.
index_name Nom de l'index. Il doit être unique au sein de la table.
column_name Nom de la colonne JSON à indexer.
column_name->'$.json_path' Colonne JSON et clé de propriété spécifique. Nécessite la version V3.1.6.8 ou ultérieure.
Important

Si une colonne JSON possède déjà un index, supprimez-le avant de créer un index sur une clé de propriété pour cette même colonne.

Exemples

Indexez l'intégralité de la colonne JSON info :

ALTER TABLE devices ADD KEY idx_info(info);

Indexez uniquement la clé de propriété status :

ALTER TABLE devices ADD KEY idx_info_status(info->'$.status');

Créer un index de tableau JSON

Les index de tableau JSON accélèrent les requêtes d'appartenance sur les tableaux JSON à l'aide des fonctions JSON_CONTAINS et JSON_OVERLAPS. Ce type d'index nécessite la version V3.1.10.6 ou ultérieure.

L'expression JSONPath $[*] correspond à tous les éléments d'un tableau JSON.

Les index de tableau JSON prennent uniquement en charge les éléments de tableau numériques et les chaînes. Les tableaux et objets imbriqués ne peuvent pas être indexés.

Créer un index de tableau JSON lors de la création d'une table

Syntaxe

CREATE TABLE table_name(
  column_name column_type,
  {INDEX|KEY} [index_name](column_name->'$[*]')
)
DISTRIBUTED BY HASH(column_name);

Paramètres

Paramètre Description
index_name Nom de l'index. Il doit être unique au sein de la table.
column_name->'$[*]' Colonne JSON à indexer. $[*] sélectionne tous les éléments du tableau. Par exemple, info->'$[*]' crée un index de tableau sur la colonne info.

Exemple

Indexez la colonne de tableau info dans la table devices :

CREATE TABLE devices(
  id int,
  info json,
  index idx_info_tags(info->'$[*]')
)
DISTRIBUTED BY HASH(id);

Créer un index de tableau JSON sur une table existante

Syntaxe

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name->'$[*]')

Paramètres

Paramètre Description
db_name Nom de la base de données.
table_name Nom de la table.
index_name Nom de l'index. Il doit être unique au sein de la table.
column_name->'$[*]' Colonne JSON à indexer. $[*] sélectionne tous les éléments du tableau.

Exemple

Ajoutez un index de tableau JSON sur la colonne info de la table devices :

ALTER TABLE devices ADD KEY idx_info_tags(info->'$[*]');

Supprimer un index

Syntaxe

ALTER TABLE db_name.table_name DROP KEY index_name

Pour trouver le nom de l'index, exécutez la commande suivante :

SHOW INDEX FROM db_name.table_name;

Exemples

Supprimez l'index idx_info de la table devices :

ALTER TABLE mydb.devices DROP KEY idx_info;

Supprimez l'index de tableau JSON idx_info_tags de la table devices :

ALTER TABLE mydb.devices DROP KEY idx_info_tags;

Étapes suivantes

  • JSON : Référence du type de données JSON pour AnalyticDB for MySQL.

  • Fonctions JSON : Fonctions JSON prises en charge par AnalyticDB for MySQL, y compris JSON_CONTAINS et JSON_OVERLAPS.