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 :