Standardmäßig sind alle Indizes in Oracle ungeclustert. Die einzigen geclusterten Indizes in Oracle sind die Index-Organized Tables (IOT)-Primärschlüsselindizes.
Sie können feststellen, ob eine Tabelle ein IOT ist, indem Sie sich den IOT_TYPE
ansehen Spalte in ALL_TABLES
view (ihr Primärschlüssel könnte durch Abfragen der ALL_CONSTRAINTS
ermittelt werden und ALL_CONS_COLUMNS
Ansichten).
Hier sind einige Gründe, warum Ihre Abfrage geordnete Zeilen zurückgeben könnte:
- Ihre Tabelle ist indexorganisiert und
FIELD
ist der führende Teil seines Primärschlüssels. - Ihre Tabelle ist heap-organisiert, aber die Zeilen sind zufällig nach
FIELD
geordnet , passiert dies manchmal bei einer inkrementierenden Identitätsspalte.
Fall 2 gibt nur zufällig sortierte Zeilen zurück. Die Reihenfolge der Einfügungen ist nicht garantiert, außerdem steht es Oracle frei, alte Blöcke wiederzuverwenden, falls einige in Zukunft freien Speicherplatz haben, wodurch die fragile Reihenfolge gestört wird.
Fall 1 gibt meistens geordnete Zeilen zurück, Sie sollten sich jedoch nicht darauf verlassen, da die Reihenfolge der zurückgegebenen Zeilen vom Algorithmus des Zugriffspfads abhängt, der sich in Zukunft ändern kann (oder wenn Sie DB-Parameter ändern, insbesondere Parallelität ).
Wenn Sie geordnete Zeilen wünschen, sollten Sie in beiden Fällen eine ORDER BY-Klausel angeben:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;