Domyślnie wszystkie indeksy w Oracle są nieklastrowane. Jedynymi indeksami klastrowymi w Oracle są indeksy klucza podstawowego IOT (Index-Organized Tables).
Możesz określić, czy tabela jest IOT, patrząc na IOT_TYPE
kolumna w ALL_TABLES
widok (jego klucz podstawowy można określić, wysyłając zapytanie do ALL_CONSTRAINTS
i ALL_CONS_COLUMNS
widoki).
Oto kilka powodów, dla których zapytanie może zwrócić uporządkowane wiersze:
- Twoja tabela jest zorganizowana według indeksu i
FIELD
jest wiodącą częścią jego klucza podstawowego. - Twoja tabela jest zorganizowana na stercie, ale wiersze są przypadkowo uporządkowane według
FIELD
, zdarza się to czasami na rosnącej kolumnie tożsamości.
Przypadek 2 zwróci posortowane wiersze tylko przez przypadek. Kolejność wstawek nie jest gwarantowana, ponadto Oracle może ponownie wykorzystać stare bloki, jeśli niektóre z nich będą miały dostępną przestrzeń w przyszłości, zakłócając delikatną kolejność.
Przypadek 1 w większości przypadków zwróci uporządkowane wiersze, jednak nie powinieneś na nim polegać ponieważ kolejnośćzwracanych wierszy zależy od algorytmuścieżki dostępu, który może ulec zmianie w przyszłości (lub jeśli zmienisz parametr DB, szczególnie równoległość ).
W obu przypadkach, jeśli chcesz uporządkować wiersze, powinieneś podać klauzulę ORDER BY:
SELECT field
FROM (SELECT field
FROM TABLE
ORDER BY field)
WHERE rownum <= 100;