sql >> Database teknologi >  >> RDS >> Oracle

Er et indeks klynget eller ikke-klynget i Oracle?

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:

  1. Din tabel er indeksorganiseret og FIELD er den førende del af dens primære nøgle.
  2. 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;


  1. Hæng i Python-scriptet ved hjælp af SQLAlchemy og multiprocessing

  2. Hvordan man bruger en variabel som et kolonnenavn for en SELECT-sætning

  3. Sådan deaktiveres og aktiveres alle begrænsninger i tabel mysql inkl. PK FK CHK UNI mm

  4. Datatype for URL