sql >> Base de Datos >  >> RDS >> Oracle

¿Un índice está agrupado o no agrupado en Oracle?

De forma predeterminada, todos los índices de Oracle no están agrupados. Los únicos índices agrupados en Oracle son los índices de clave principal de las tablas organizadas por índices (IOT).

Puede determinar si una tabla es un IOT observando el IOT_TYPE columna en ALL_TABLES vista (su clave principal podría determinarse consultando el ALL_CONSTRAINTS y ALL_CONS_COLUMNS vistas).

Estas son algunas razones por las que su consulta podría devolver filas ordenadas:

  1. Su tabla está organizada por índices y FIELD es la parte inicial de su clave principal.
  2. Su tabla está organizada en montones, pero las filas están ordenadas por casualidad por FIELD , esto sucede a veces en una columna de identidad creciente.

El caso 2 devolverá filas ordenadas solo por casualidad. El orden de las inserciones no está garantizado; además, Oracle es libre de reutilizar bloques antiguos si alguno tiene espacio disponible en el futuro, interrumpiendo el frágil orden.

La mayoría de las veces, el caso 1 devolverá filas ordenadas, sin embargo, no debe confiar en él, ya que el orden de las filas devueltas depende del algoritmo de la ruta de acceso que puede cambiar en el futuro (o si cambia el parámetro DB, especialmente el paralelismo ).

En ambos casos, si desea filas ordenadas, debe proporcionar una cláusula ORDER BY:

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