sql >> データベース >  >> RDS >> Oracle

インデックスはOracleでクラスター化されていますか、それともクラスター化されていませんか?

    デフォルトでは、Oracleのすべての索引はクラスター化されていません。 Oracleのクラスター化インデックスは、Index-Organized Tables(IOT)の主キーインデックスのみです。

    IOT_TYPEを確認することで、テーブルがIOTであるかどうかを判断できます。 ALL_TABLESの列 ビュー(その主キーは、ALL_CONSTRAINTSを照会することで判別できます。 およびALL_CONS_COLUMNS ビュー)。

    クエリが順序付けられた行を返す理由は次のとおりです。

    1. テーブルはインデックスで構成されており、FIELD 主キーの主要部分です。
    2. テーブルはヒープ構成されていますが、行は偶然にFIELD順に並べられています。 、これは、増加するID列で発生することがあります。

    ケース2は、ソートされた行を偶然にのみ返します。挿入の順序は保証されていません。さらに、将来使用可能なスペースがある場合、Oracleは古いブロックを自由に再利用でき、壊れやすい順序を混乱させます。

    ケース1はほとんどの場合、順序付けられた行を返しますが、返される行の順序は、将来変更される可能性のあるアクセスパスのアルゴリズムに依存するため(またはDBパラメーター、特に並列処理を変更した場合)、これに依存しないでください。 。

    どちらの場合も、順序付けられた行が必要な場合は、ORDERBY句を指定する必要があります。

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


    1. データベースの設計と特定の関係のモデリング

    2. Goで`database/sql`を使用して更新するのは遅い

    3. データベース設計の候補キーとは何ですか?

    4. データベースがスリープしていて例外が発生している