Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ist ein Index in Oracle geclustert oder nicht gruppiert?

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:

  1. Ihre Tabelle ist indexorganisiert und FIELD ist der führende Teil seines Primärschlüssels.
  2. 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;