sql >> Databáze >  >> RDS >> Oracle

Je index v Oracle seskupený nebo unclustered?

Ve výchozím nastavení jsou všechny indexy v Oracle unclustered. Jedinými seskupenými indexy v Oracle jsou indexy primárního klíče IOT (Index-Organized Tables).

Zda je tabulka IOT, můžete určit podle IOT_TYPE ve sloupci ALL_TABLES zobrazení (jeho primární klíč lze určit dotazem na ALL_CONSTRAINTS a ALL_CONS_COLUMNS zhlédnutí).

Zde je několik důvodů, proč může váš dotaz vrátit seřazené řádky:

  1. Vaše tabulka je uspořádána podle indexu a je FIELD je hlavní částí jeho primárního klíče.
  2. Vaše tabulka je uspořádána do hromady, ale řádky jsou náhodně seřazeny podle FIELD , to se někdy stává ve sloupci zvyšující se identity.

Případ 2 vrátí seřazené řádky pouze náhodou. Pořadí vložek není zaručeno, navíc společnost Oracle může znovu použít staré bloky, pokud některé náhodou budou mít v budoucnu volné místo, což naruší křehké řazení.

Případ 1 většinu času vrátí uspořádané řádky, ale neměli byste na to spoléhat, protože pořadí vrácených řádků závisí na algoritmu přístupové cesty, která se může v budoucnu změnit (nebo pokud změníte parametr DB, zejména paralelismus ).

V obou případech, pokud chcete uspořádané řádky, měli byste zadat klauzuli ORDER BY:

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


  1. Sql kód pro vytvoření zrcadlového obrazu řetězce v Oracle sql

  2. #1055 - Výraz seznamu SELECT není v klauzuli GROUP BY a obsahuje neagregovaný sloupec, což není kompatibilní s sql_mode=only_full_group_by

  3. Je možné použít GROUP BY s proměnnými vazby?

  4. vrátit řádky, kde součet v poli je menší než zadaná hodnota