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 :
- Votre table est organisée en index et
FIELD
est la partie principale de sa clé primaire. - 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;