Dans Oracle, vous pouvez utiliser l'instruction « select status from user_indexes which index_name='index name'; » pour déterminer si l'index est invalide ; si le résultat renvoyé est VALID, cela signifie que l'index n'est pas invalide, sinon il signifie que l'index n'est pas valide.
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
La syntaxe est la suivante :
select status from user_indexes where index_name='索引名称';
Si le résultat renvoyé est VALIDE, cela signifie que l'index est valide !
L'exemple est présenté dans la figure :
Connaissances étendues :
Solution en cas d'échec d'indexation
1. Choisissez un optimiseur Oracle approprié
Il existe 3 types d'optimiseurs Oracle :
a RÈGLE. (Basé sur des règles) b. COÛT (basé sur les coûts) c.
Définissez l'optimiseur par défaut via diverses déclarations de paramètres OPTIMIZER_MODE dans le fichier init.ora, tels que RULE, COST, CHOOSE, ALL_ROWS, FIRST_ROWS. Bien sûr, vous le remplacez également au niveau de l'instruction SQL ou au niveau de la session.
Pour utiliser l'optimiseur basé sur les coûts (CBO, Cost-Based Optimizer), vous devez exécuter fréquemment la commande d'analyse pour augmenter la précision des statistiques d'objets dans la base de données.
Si le mode d'optimisation de la base de données est défini sur sélectif (CHOOSE), le mode d'optimisation réel sera lié à l'exécution ou non de la commande d'analyse. Si la table a été analysée, le mode optimiseur deviendra automatiquement CBO. Dans le cas contraire, la base de données utilisera la forme RULE de l'optimiseur.
(Table d'analyse
analyze table PROD_PARTS compute statistics; ANALYZE TABLE PROD_PARTS COMPUTE STATISTICS FOR ALL INDEXED COLUMNS; analyze table PROD_PARTS compute statistics for table for all indexes for all indexed columns;
) [Après un échec d'index, après avoir consulté le DBA, j'ai découvert qu'il s'agissait d'un problème de statistiques de données. La solution spécifique est d'exécuter l'instruction ci-dessus]
Par défaut, Oracle utilise CHOOSE. Afin d'éviter des analyses de table complètes inutiles, vous devez essayer d'éviter d'utiliser l'optimiseur CHOOSE et d'utiliser directement un optimiseur basé sur des règles ou basé sur les coûts.
2.Reconstruire l'index
alter index 索引名 rebuild 【online】
3. Forcer l'index
Après avoir ajouté un indice à l'instruction, forcez-la à utiliser 'RECORD_ENTITYID'. L'index
sql devient comme ceci
Quote
select /*+ index(record,record_entityid) */ * from RECORD where entityId='24' and entityType='blog';
/*+ index(. record,record_entityid) */, index signifie une utilisation forcée de l'index, record est le nom de la table et record_entityid est le nom de l'index. Le plan d'exécution est cohérent avec la base de données de test, tous deux utilisant l'index 'RECORD_ENTITYID', et la lecture et l'écriture logiques sont également de 4.
Après des tests ultérieurs, après avoir analysé la table et les deux index sans ajouter d'indices, l'index 'RECORD_ENTITYID' peut également être utilisé. Cependant, comme le tableau est mis à jour assez fréquemment, je ne sais pas combien de temps il faudra pour l'analyser à nouveau
Tutoriel recommandé : "Tutoriel vidéo Oracle"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!