Lorsqu'une table large doit répondre à plusieurs modèles de requête, chacun accédant à des combinaisons de colonnes différentes, un seul index de recherche ne peut pas couvrir efficacement tous les chemins d'accès. Les index de recherche multiples vous permettent de définir jusqu'à cinq index indépendants sur une même table primaire, chacun couvrant un ensemble de colonnes différent. Lindorm achemine automatiquement chaque requête vers l'index le plus adapté.
Cette fonctionnalité est en aperçu public. Pour l'activer, contactez le support technique Lindorm sur DingTalk (ID du groupe : s0s3eg3 ).
Prérequis
Avant de commencer, assurez-vous que :
Le moteur LindormTable est en version 2.8.2.3 ou ultérieure.
Le moteur Lindorm LTS est en version 3.8.12.5 ou ultérieure.
Pour vérifier ou mettre à jour la version de votre moteur, consultez la rubrique Mise à jour de la version mineure.
Limitations
Une table primaire prend en charge un maximum de 5 index de recherche.
Tous les index de recherche d'une même table primaire doivent avoir des noms uniques. Les noms d'index ne doivent pas entrer en conflit avec d'autres types d'index sur la même table.
Créer plusieurs index de recherche
Les étapes suivantes expliquent comment créer une table large, y construire plusieurs index de recherche, y écrire des données et interroger ces données via les index.
Étape 1 : Créer une table large
create table testTable (pk int, c1 int, c2 varchar, c3 long, primary key(pk));
Étape 2 : Créer plusieurs index de recherche sur la table
Les colonnes et les propriétés des index peuvent se chevaucher d'un index à l'autre.
create index idx1 using search on testTable (c1,c2);
create index idx2 using search on testTable (c3);
create index idx3 using search on testTable (c1,c2,c3);
Étape 3 : Écrire des données
Insérez ou mettez à jour les lignes dans la table large. Les données sont automatiquement synchronisées vers chaque index de recherche.
upsert into testTable(pk,c1,c2,c3) values (1,1,'1',1);
upsert into testTable(pk,c1,c2,c3) values (2,2,'2',2);
upsert into testTable(pk,c1,c2,c3) values (3,3,'3',3);
upsert into testTable(pk,c1,c2,c3) values (4,4,'4',4);
Étape 4 : Interroger les données
Lindorm sélectionne automatiquement un index de recherche approprié en fonction des colonnes de la requête. Lorsque plusieurs index couvrent la même requête, le système en choisit un.
Requête sur les trois colonnes — idx3 est sélectionné car il couvre c1, c2 et c3 :
select * from testTable where c1>0 and c2>'0' and c3>0;
Requête sur deux colonnes — soit idx1 soit idx3 est sélectionné, puisque tous deux couvrent c1 et c2 :
select * from testTable where c1>0 and c2>'0';
Requête sur une colonne — soit idx2 soit idx3 est sélectionné, puisque tous deux couvrent c3 :
select * from testTable where c3>0;
Étape 5 : Spécifier explicitement un index (facultatif)
Utilisez la syntaxe HINT pour forcer l'utilisation d'un index spécifique lors d'une requête, en remplaçant la sélection automatique :
select /*+ _l_force_index_('idx1') */ * from testTable where c1>0 and c2>'0';
Étape 6 : Gérer l'état des index
Utilisez ALTER INDEX pour contrôler indépendamment l'état de chaque index :
alter index idx1 on testTable inactive;
alter index idx1 on testTable disabled;
Le tableau suivant décrit chaque valeur d'état et son effet sur les requêtes et l'indexation :
| État | Interrogeable | Données indexées | Remarques |
|---|---|---|---|
| ACTIVE | Oui | Oui | État de fonctionnement par défaut. |
| INACTIVE | Non | Oui | Suspendu pour les requêtes, mais continue d'indexer les écritures. |
| DISABLED | Non | Non | Arrête l'indexation des écritures. Impossible de modifier cet état vers un autre — exécutez la commande REBUILD pour réactiver l'index. |