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

Un indice è raggruppato o non raggruppato in Oracle?

Per impostazione predefinita, tutti gli indici in Oracle sono non cluster. Gli unici indici cluster in Oracle sono gli indici delle chiavi primarie Index-Organized tables (IOT).

Puoi determinare se una tabella è un IOT osservando IOT_TYPE colonna nella ALL_TABLES view (la sua chiave primaria potrebbe essere determinata interrogando ALL_CONSTRAINTS e ALL_CONS_COLUMNS visualizzazioni).

Ecco alcuni motivi per cui la tua query potrebbe restituire righe ordinate:

  1. La tua tabella è organizzata in base all'indice e FIELD è la parte principale della sua chiave primaria.
  2. La tua tabella è organizzata in heap ma le righe sono casualmente ordinate per FIELD , questo accade a volte su una colonna di identità in aumento.

Il caso 2 restituirà le righe ordinate solo per caso. L'ordine degli inserti non è garantito, inoltre Oracle è libera di riutilizzare i vecchi blocchi se alcuni dovessero avere spazio disponibile in futuro, interrompendo il fragile ordinamento.

Il caso 1 restituirà la maggior parte delle volte righe ordinate, tuttavia non dovresti fare affidamento su di esso poiché l'ordine delle righe restituite dipende dall'algoritmo del percorso di accesso che potrebbe cambiare in futuro (o se modifichi il parametro DB, in particolare il parallelismo ).

In entrambi i casi se vuoi righe ordinate dovresti fornire una clausola ORDER BY:

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