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

OracleIndexのクラスタリング係数の計算方法

    目次

    Oracleインデックスクラスタリング係数(CF)とは何ですか?

    クラスタリング係数は、インデックス付きの列と比較して、データがテーブル内でランダムに分散される程度を表す数値です。簡単に言うと、インデックスを使用してテーブルを読み取る際の「ブロックスイッチ」の数です。

    オプティマイザの計算で重要な役割を果たすのは重要な統計です。これは、インデックス範囲スキャンの計算に重みを付けるために使用されます。クラスタリング係数が高いほど、インデックス範囲スキャンのコストが高くなります

    適切なクラスタリング係数は、テーブルのブロック数の値と等しい(または近い)です。

    悪いクラスタリング係数は、テーブルの行数と同じ(またはそれに近い)です。

    CFはどのように計算されますか?

    Oracleは、リーフブロックを端から端まで歩くインデックスのフルスキャンを実行することにより、クラスタリング係数を計算します。 Oracleは、各リーフのエントリごとに、インデックス値のROWIDから取得した絶対ファイル番号とブロックIDを確認します。インデックスが指すデータ行を含む「異なる」ブロックの数を継続的にカウントします。最初のエントリのブロックアドレスが2番目のエントリのブロックアドレスと比較されます。同じテーブルブロックの場合、Oracleはカウンタをインクリメントしません。テーブルブロックが異なる場合、Oracleはカウントに1を追加します。このカウントプロセスはエントリからエントリへと続き、常に前のエントリと現在のエントリを比較します。

    CFはブロック数に等しいため、上記はCFの良い例です

    悪いクラスタリング要因の例

    ここで、クラスタリング係数は行数に等しくなります

    このカウント方法には、予期しない結果があります。データがたまたま小さなブロックのセットに入力されているが、インデックスキーを参照する順序ではない場合、真に異なるブロックが数個しかない場合は、行のセットが大きなブロックのセットにまたがっているように見える可能性があります。 。したがって、CFは高くなりますが、実際には、ごくわずかなブロックにしか触れていません。この問題は、テーブル設定を使用し、テーブル化されたキャッシュブロックを指定することで、12cで軽減できます。

    オラクルのクラスタリング係数を改善する方法

    インデックスの再構築は、クラスタリング係数に影響を与えません。クラスタリング係数を下げるには、テーブルを並べ替えて再構築する必要があります。

    クラスタリング係数を決定するためのクエリ

    CFはデータディクショナリに保存され、dba_indexes(またはuser_indexes)から表示できます。

    実際、すべてのインデックス統計はそこで見つけることができます

    SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
    avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
    FROM dba_indexes
    WHERE table_name = 'ORDERS' ;

    Oracleインデックスクラスタリング係数はオプティマイザ計画にどのように影響しますか?

    クラスタリング係数は、オプティマイザがインデックスアクセスパスに重みを付けるために使用する主要な統計です。これは、クエリを満たすすべての行を順番に取得するために必要なテーブルブロックへのLIOの数の見積もりです。クラスタリング係数が高いほど、オプティマイザーが推定するより多くのLIOが必要になります。必要なLIOが多いほど、魅力が低下するため、インデックスの使用コストが高くなります。

    関連記事
    Oracleパーティションインデックス:Oracleパーティションインデックスについて、グローバル非パーティションインデックスとは何ですか?、ローカルプレフィックスインデックスとは何ですか、非プレフィックスローカルインデックス
    oracleのテーブルでインデックスを検索する:この記事をチェックして、方法に関するクエリを見つけてくださいオラクルのテーブルでインデックスを検索するには、スキーマ内のすべてのインデックス、インデックスステータス、インデックス列を一覧表示します。
    オラクルのインデックスの種類:このページは、オラクルのインデックス情報、オラクルのさまざまな種類のインデックス、例、方法で構成されています。 oracleでインデックスを作成/削除/変更するには
    Oracleの仮想インデックス:Oracleの仮想インデックスとは何ですか? OracleデータベースのExplainPlanの用途、制限、利点、および使用方法、非表示パラメータ_USE_NOSEGMENT_INDEXES


    1. 高可用性のためのMySQLのハイブリッドクラウドレプリケーション

    2. 3から6までのランダムなint値を生成します

    3. SQLServerでのINSERTまたはUPDATEのソリューション

    4. 名前が特定の文字列で始まるすべてのテーブルを削除します