• Home
  • LLMs
  • Python
  • Docker
  • Kubernetes
  • Java
  • Ubuntu
  • Maven
  • Archived
  • About
Oracle | Function Based Index : NVL
  1. Notes
  2. Les considérations à prendre pour les valeurs NULL lors de la création d'un indexe.
    1. Créer un indexe sur la colonne ID.
    2. Créer un indexe sur la colonne REFID.
    3. Créer un indexe-fonction (NVL) sur la colonne REFID.

  1. Notes
    Points importants (voir les détails dans ce qui suit) :
    • Si on crée un indexe avec la fonction NVL, alors il faut utiliser cette fonction dans les conditions SQL, sinon l'indexe ne sera pas utilisé.

    • La création d'un indexe avec la fonction NVL doit prendre en considération le pourcentage des valeurs NULL d'une colonne dans toute la table ainsi que la fréquence des requêtes avec l'agrégat IS NULL sur cette colonne.

    • Oracle peut ignorer de ne pas utiliser un indexe et utiliser un full scan de la table si l'optimiseur juge que c'est la façon optimale de sélectionner des données (c'est le cas si les blocs de données sont déjà chargées en mémoire).

    This table (and its data) is used in the examples bellow:

  2. Les considérations à prendre pour les valeurs NULL lors de la création d'un indexe.
    1. Créer un indexe sur la colonne ID.


      Résultat de la requête :
    2. Créer un indexe sur la colonne REFID.


      Résultat de la requête :
      Il faut remarquer que seulement 25000 lignes ont été insérées pour l'indexe alors que la table contient réellement 50000 lignes.

      Un des points importants à comprendre est la gestion des valeurs NULL dans un indexe :
      Un indexe conventionnel (B*Tree) n'insère pas d'entrées pour les valeurs NULL.
      Les colonnes dont les valeurs sont NULL n'ont été pas indexées.

      Ce qui est important à savoir aussi est qu'il y aura un full scan de la table si on effectue une requête pour remonter toutes les lignes dont la valeur de la colonne REFID est NULL ou NOT NULL.
      • IS NULL :
        Plan d'exécution :

      • IS NOT NULL :
        Plan d'exécution :
      Une des solutions possibles est d'ajouter un hint pour forcer l'utilisation de l'indexe :
      • IS NULL :
        Plan d'exécution :

      • IS NOT NULL :
        Plan d'exécution :
      Sinon :
      Plan d'exécution :
    3. Créer un indexe-fonction (NVL) sur la colonne REFID.


      Résultat de la requête :
      Il faut remarquer qu'il y maintenant 50000 lignes insérées pour l'indexe.

      Ce qui est important à savoir est qu'il y aura un full scan de la table si on effectue une requête pour remonter toutes les lignes dont la valeur de la colonne REFID est égale à une valeur précise, NULL, ou NOT NULL.

      Plan d'exécution :
      La solution est d'utiliser la fonction NVL sur la colonne REFID :
      Plan d'exécution :
© 2025  mtitek