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

Un index est-il clusterisé ou non clusterisé dans Oracle ?

Par défaut, tous les index d'Oracle sont non clusterisés. Les seuls index clusterisés dans Oracle sont les index de clé primaire Index-Organized Tables (IOT).

Vous pouvez déterminer si une table est un IOT en regardant le IOT_TYPE colonne dans ALL_TABLES view (sa clé primaire peut être déterminée en interrogeant les ALL_CONSTRAINTS et ALL_CONS_COLUMNS vues).

Voici quelques raisons pour lesquelles votre requête peut renvoyer des lignes ordonnées :

  1. Votre table est organisée en index et FIELD est la partie principale de sa clé primaire.
  2. Votre table est organisée en tas mais les lignes sont aléatoirement triées par FIELD , cela se produit parfois sur une colonne d'identité qui s'incrémente.

Le cas 2 renverra les lignes triées uniquement par hasard. L'ordre des inserts n'est pas garanti, de plus Oracle est libre de réutiliser d'anciens blocs s'il s'avère que certains ont de l'espace disponible dans le futur, perturbant le fragile ordre.

Le cas 1 renverra la plupart du temps des lignes ordonnées, mais vous ne devez pas vous y fier car l'ordre des lignes renvoyées dépend de l'algorithme du chemin d'accès qui peut changer à l'avenir (ou si vous modifiez le paramètre DB, en particulier le parallélisme ).

Dans les deux cas, si vous voulez des lignes ordonnées, vous devez fournir une clause ORDER BY :

SELECT field 
  FROM (SELECT field 
          FROM TABLE 
         ORDER BY field) 
 WHERE rownum <= 100;