Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment le facteur de clustering d'Oracle Index est calculé

Table des matières

  • Qu'est-ce que le facteur de clustering d'index Oracle (CF) ?
  • Comment le FC est-il calculé ?
  • comment améliorer le facteur de clustering dans oracle
  • Requête pour déterminer le facteur de regroupement 
  • Quel est l'impact du facteur de clustering d'index Oracle sur le plan d'optimisation ?

Qu'est-ce que le facteur de clustering d'index Oracle (CF) ?

Le facteur de regroupement est un nombre qui représente le degré de distribution aléatoire des données dans une table par rapport à la colonne indexée. En termes simples, il s'agit du nombre de "commutations de bloc" lors de la lecture d'une table à l'aide d'un index.

C'est une statistique importante qui joue un rôle important dans le calcul de l'optimiseur. Il est utilisé pour pondérer le calcul des balayages de plage d'index. Lorsque le facteur de regroupement est plus élevé, le coût de l'analyse de la plage d'index est plus élevé

Un bon facteur de clustering est égal (ou proche) aux valeurs du nombre de blocs de la table.

Un mauvais facteur de clustering est égal (ou proche) au nombre de lignes du tableau.

Comment le FC est-il calculé ?

Oracle calcule le facteur de clustering en effectuant une analyse complète de l'index en parcourant les blocs feuilles de bout en bout. Pour chaque entrée de chaque feuille, Oracle vérifie le numéro de fichier absolu et l'ID de bloc, tels qu'obtenus à partir du ROWID de la valeur indexée. Il conserve un décompte du nombre de blocs "différents" contenant des lignes de données pointées par l'index. L'adresse de bloc de la première entrée est comparée à l'adresse de bloc de la deuxième entrée. S'il s'agit du même bloc de table, Oracle n'incrémente pas le compteur. Si les blocs de table sont différents, Oracle ajoute un au nombre. Ce processus de comptage se poursuit d'une entrée à l'autre en comparant toujours l'entrée précédente à l'entrée actuelle.

Ce qui précède est un bon exemple de CF car CF est égal au nombre de blocs

Exemple de mauvais facteur de clustering

Ici, le facteur de regroupement est égal au nombre de lignes

Cette méthode de comptage a son propre résultat inattendu. Supposons que les données soient remplies sur un petit ensemble de blocs, mais pas dans l'ordre en référence à la clé d'index, alors un ensemble de lignes pourrait sembler être sur un grand ensemble de blocs alors qu'il n'y a peut-être que quelques vrais blocs distincts . Donc CF serait plus élevé, mais en fait, il touche très peu de blocs. Ce problème peut être atténué dans 12c en utilisant les préférences de table et en spécifiant le bloc mis en cache dans la table.

comment améliorer le facteur de clustering dans oracle

Une reconstruction d'index n'aurait aucun effet sur le facteur de clustering. La table doit être triée et reconstruite afin de réduire le facteur de regroupement.

Requête pour déterminer le facteur de regroupement 

CF est stocké dans le dictionnaire de données et peut être consulté à partir de dba_indexes (ou user_indexes).

En fait, toutes les statistiques de l'index s'y trouvent

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

Quel est l'impact du facteur de clustering d'index Oracle sur le plan d'optimisation ?

Le facteur de regroupement est la principale statistique utilisée par l'optimiseur pour pondérer les chemins d'accès à l'index. Il s'agit d'une estimation du nombre de LIO vers les blocs de table nécessaires pour acquérir toutes les lignes qui satisfont la requête dans l'ordre. Plus le facteur de regroupement est élevé, plus l'optimiseur estimera qu'il faudra de LIO. Plus le nombre de LIO requis est élevé, moins l'utilisation de l'index sera attrayante, et donc plus coûteuse.

Article connexe
Index de partition Oracle :Comprendre l'index de partition Oracle, Qu'est-ce que les index non partitionnés globaux ?, Qu'est-ce que les index préfixés locaux, index local non préfixé
trouver des index sur une table dans oracle :consultez cet article pour trouver des requêtes sur la façon pour trouver des index sur une table dans oracle, répertorier tous les index dans le schéma, l'état de l'index, la colonne d'index
types d'index dans oracle :cette page contient des informations sur les index oracle, différents types d'index dans oracle avec un exemple, comment créer/supprimer/modifier l'index dans oracle
Index virtuel dans Oracle :qu'est-ce que l'index virtuel dans Oracle ? Utilisations, limitation, avantage et comment utiliser pour vérifier le plan d'explication dans la base de données Oracle, paramètre caché _USE_NOSEGMENT_INDEXES