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

パーティションを削除した後、インデックスが使用できなくなりました。どうすればよいですか。

    • ANALYZE TABLEはインデックスを再構築しませんよね?

      わかりませんが、最近はDBMS_STATS.GATHER_TABLE_STATSを使用する必要があります ANALYZE TABLEではなく

    • 直接ロードとは、データが行ごとに挿入されるのではなく、一括で挿入されることを意味します。ダイレクトパスロード

    • インデックスがUNUSABLEになった場合 その場合、それはグローバルインデックスでなければなりません。

    • UPDATE GLOBAL INDEXESを使用します 句、つまりalter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES; またはローカルインデックスを作成します。

    • インデックスを作成した列によって異なります。テーブル全体の代わりに、DBMS_STATS.GATHER_INDEX_STATSを実行することもできます。 。 DBMS_STATS.GATHER_TABLE_STATSを使用 単一のパーティションだけ、さらには単一の列を指定することもできます。

    ところで、多くの質問に対して、私の答えは実際には「Oracleのドキュメントを参照しましたか?」となるはずです。または「あなたはグーグルを知っていますか?」スクリーンショットによると、スキーマSYSを使用します およびテーブルスペースSYSAUX ユーザーオブジェクト用。あなたはそれをすべきではありません。独自のユーザーを作成し、このスキーマに任意のオブジェクトを作成します。

    一般に、パーティションインデックスには次の3つのタイプがあります。

    1. グローバルインデックス:テーブル全体にまたがる1つの大きなインデックスがあります。これは、たとえば、インデックス付きの列がパーティションキーの一部でない場合、UNIQUEINDEXESでは必須です。実際、そのようなインデックスは分割されていません。 (ALL_INDEXESに示されているように )
    2. ローカルインデックス:このインデックスは、基になるテーブルと同じ方法でパーティション化されます。各テーブルパーティションには、それに応じたインデックスパーティションがあります。
    3. PARTITIONED INDEX:このインデックスはパーティション化されていますが、異なります 基になるテーブルより。パーティション化されていないテーブルにパーティション化されたインデックスを作成することも可能だと思います。パーティションインデックスは、非常に特殊なユースケースのみに制限されています。実際、そのようなインデックスがどこに意味があるのか​​想像できません。


    1. PHP/MySQL概念データベースの「同期」の質問

    2. 特定の量よりも多いカウントで合計を取得する方法

    3. テーブルに列を追加してから、トランザクション内で更新します

    4. PostgreSQLストリーミングレプリケーション入門