• Home
  • LLMs
  • Python
  • Docker
  • Kubernetes
  • Java
  • Ubuntu
  • Maven
  • Archived
  • About
Oracle | Function Based Index : NLSSORT
  1. Notes
  2. NLS_SORT=BINARY
  3. NLS_SORT=BINARY_AI

  1. Notes
    Points Importants (voir les détails dans ce qui suit) :
    • Si on veut que le tri/comparaison soit binaire (sensible aux accents et à la casse), alors on est mieux :

      • de définir la valeur du paramètre de la session NLS_SORT à BINARY ;

      • de définir la valeur du paramètre de la session NLS_COMP à BINARY ;

      • et d'utiliser un indexe régulier (sans fonction).

    • Si on veut effectuer un tri/comparaison linguistique sensible aux accents et à la casse, alors on est mieux :

      • de définir la valeur du paramètre de la session NLS_SORT à une valeur linguistique (FRENCH par exemple) ;

      • de définir la valeur du paramètre de la session NLS_COMP à LINGUISTIC ;

      • et d'utiliser un indexe avec la fonction NLSSORT qui initialise NLS_SORT à la même valeur que celle définie pour le paramètre NLS_SORT de la session.

    • Si on veut que le tri/comparaison soit insensible aux accents et/ou à la casse, alors on est mieux :

      • de définir la valeur du paramètre de la session NLS_SORT à BINARY_AI/BINARY_CI (ou une valeur linguistique avec l'extension _AI/_CI, FRENCH_AI/FRENCH_CI par exemple) ;

      • de définir la valeur du paramètre de la session NLS_COMP à LINGUISTIC ;

      • et d'utiliser un indexe avec la fonction NLSSORT qui initialise NLS_SORT à la même valeur que celle définie pour le paramètre NLS_SORT de la session.

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

  2. NLS_SORT=BINARY
    Si la valeur du paramètre de la session NLS_SORT est binaire alors seul un indexe régulier (sans fonction) peut être utilisé :



    Plan d'exécution :

    Si on crée un indexe avec la fonction NLSSORT avec nls_sort initialisé à BINARY_AI, alors cet indexe ne sera pas utilisé et Oracle effectuera un full scan de la table :


    Plan d'exécution :

    Il est possible cependant de forcer l'utilisation de l'indexe par un hint, mais ça risque, en fonction du volume des données de la table, d'être moins performant :

    Plan d'exécution :
  3. NLS_SORT=BINARY_AI
    Si la valeur du paramètre de la session NLS_SORT est BINARY_AI (insensible aux accents et à la casse) alors un indexe régulier ne sera pas utilisé; Oracle effectuera un full scan de la table :



    Plan d'exécution :

    Il est possible cependant de forcer l'utilisation de l'indexe par un hint, mais ça risque, en fonction du volume des données de la table, d'être moins performant :

    Plan d'exécution :

    Mais si on crée un indexe avec la fonction NLSSORT, alors cet indexe sera utilisé :


    Plan d'exécution :

    Remarque :
    Si on crée un indexe unique non sensible aux accents et/ou à la casse, on peut avoir une erreur :

    Résultat de la requête :
    La cause de l'erreur est que la fonction NLSSORT a générée la même clé pour au moins deux valeurs des lignes différentes et donc l'indexe ne peut être unique.
© 2025  mtitek