Som standard er alle indekser i Oracle ikke-klyngede. De eneste klyngede indekser i Oracle er de primære nøgleindekser for Index-Organized tables (IOT).
Du kan afgøre, om en tabel er en IOT ved at se på IOT_TYPE
kolonne i ALL_TABLES
visning (den primære nøgle kunne bestemmes ved at forespørge på ALL_CONSTRAINTS
og ALL_CONS_COLUMNS
visninger).
Her er nogle grunde til, at din forespørgsel kan returnere ordnede rækker:
- Din tabel er indeksorganiseret og
FIELD
er den førende del af dens primære nøgle. - Din tabel er heap-organiseret, men rækkerne er tilfældigt ordnet efter
FIELD
, dette sker nogle gange på en stigende identitetskolonne.
Tilfælde 2 returnerer kun sorterede rækker tilfældigt. Rækkefølgen af indsatserne er ikke garanteret, og Oracle kan desuden frit genbruge gamle blokke, hvis nogle tilfældigvis har ledig plads i fremtiden, hvilket forstyrrer den skrøbelige bestilling.
Tilfælde 1 vil det meste af tiden returnere ordnede rækker, men du bør ikke stole på det, da rækkefølgen af de returnerede rækker afhænger af algoritmen for adgangsstien, som kan ændre sig i fremtiden (eller hvis du ændrer DB-parameter, især parallelisme ).
I begge tilfælde, hvis du ønsker ordnede rækker, skal du angive en ORDER BY-klausul:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;