sql >> Database >  >> RDS >> Oracle

Is een index geclusterd of niet-geclusterd in Oracle?

Standaard zijn alle indexen in Oracle niet geclusterd. De enige geclusterde indexen in Oracle zijn de Index-Organized Tables (IOT) primaire sleutelindexen.

U kunt bepalen of een tabel een IOT is door te kijken naar de IOT_TYPE kolom in de ALL_TABLES bekijken (de primaire sleutel kan worden bepaald door de ALL_CONSTRAINTS op te vragen en ALL_CONS_COLUMNS weergaven).

Hier volgen enkele redenen waarom uw zoekopdracht geordende rijen kan opleveren:

  1. Uw tabel is geïndexeerd en FIELD is het leidende deel van zijn primaire sleutel.
  2. Uw tabel is geordend in een hoop, maar de rijen zijn per toeval geordend op FIELD , dit gebeurt soms in een oplopende identiteitskolom.

Geval 2 retourneert alleen bij toeval gesorteerde rijen. De volgorde van de inserts is niet gegarandeerd, bovendien staat het Oracle vrij om oude blokken opnieuw te gebruiken als er in de toekomst ruimte over is, waardoor de fragiele volgorde wordt verstoord.

Geval 1 zal meestal geordende rijen retourneren, maar u moet er niet op vertrouwen, aangezien de volgorde van de geretourneerde rijen afhankelijk is van het algoritme van het toegangspad dat in de toekomst kan veranderen (of als u de DB-parameter wijzigt, vooral parallellisme ).

Als u geordende rijen wilt, moet u in beide gevallen een ORDER BY-component opgeven:

SELECT field 
  FROM (SELECT field 
          FROM TABLE 
         ORDER BY field) 
 WHERE rownum <= 100;


  1. Aangepaste waarden voor automatisch verhogen van MySQL

  2. Trigger maken in mysql voor generatie UUID

  3. Hoe wordt met behulp van Oracle SQL het dagnummer van de week en de dag van de week weergegeven?

  4. Hoe voeg je een prefix toe van alle tabellen in mysql