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

OracleインデックスとOracleのインデックスの種類と例

    この投稿では、Oracleのインデックス/Oracleのインデックスの種類について例を挙げて説明します。 Oracleでインデックスを作成する方法に関するすべてのオプションについて説明します。また、Oracleでインデックスサイズを確認する方法についても説明します。この投稿を気に入っていただければ幸いです。この投稿へのフィードバックを楽しみにしています

    Oracleインデックスとは何ですか?

    • 教科書に索引があり、本の特定のトピックを見つけるのに役立つのと同じように、Oracleの索引も同じように動作します。Oracleにはさまざまな種類の索引があります。
    • インデックスは、oracleテーブルの行をすばやく検索するために使用されます。インデックスが存在しない場合、selectクエリはテーブル全体を読み取って行を返す必要があります。インデックスを使用すると、行をすばやく取得できます
    • テーブルから少数の行を取得する場合は、インデックスを作成する必要があります。または、最終的に多数の行を返すクエリから、最初の行セットをできるだけ速く取得します。また、データ分布、つまりクラスタリング係数にも依存します
    • インデックスは、論理的および物理的に関連テーブルのデータから独立しています。
    • インデックスは、テーブルとクラスターに関連付けられたオプションの構造です。テーブルの1つ以上の列にインデックスを作成して、そのテーブルでのSQLステートメントの実行を高速化できます。
    • インデックスは、適切に使用された場合にディスクI/Oを削減するための主要な手段です。
    • クエリは最初にインデックスを使用するかどうかを決定します
    • インデックスの最も優れている点は、新しい行が挿入されても、インデックス付きデータの取得パフォーマンスがほぼ一定に保たれることです。ただし、テーブルに多くのインデックスが存在すると、Oracleはテーブルに関連付けられたインデックスも更新する必要があるため、更新、削除、および挿入のパフォーマンスが低下します。
    • テーブルの所有者である場合は、インデックスを作成できます。または、別のスキーマでテーブルのインデックスを作成する場合は、そのテーブルに対するCREATEANYINDEXシステム権限またはインデックス権限のいずれかが必要です。

    論理タイプのインデックス

    インデックスのアプリケーション特性を定義します

    一意または非一意 インデックスは、一意または非一意にすることができます。 Oracleは、主キーの一意のインデックスと一意のキーの制約を作成します
    その列に一意でないインデックスがすでに存在する場合、Oracleの主キーの新しい一意のインデックスは作成されません
    コンポジット インデックスは、単一または複数の列で構成できます。複合インデックスは、WHERE句が複合インデックスの列のすべてまたは先頭部分を参照するSELECTステートメントのデータの取得を高速化できます。
    関数ベースのインデックス インデックス付きの列のデータは計算に基づいています
    アプリケーションドメインインデックス このインデックスは、特別なアプリケーション(空間、テキスト)で使用されます。

    ROWID疑似列とは

    ROWIDは、テーブルの各行のアドレスを返します。 Oracleは各行にROWIDを割り当てます。ROWIDは次のもので構成されます

    • オブジェクトのデータオブジェクト番号
    • 行が存在するデータファイル内のデータブロック
    • データブロック内の行の位置(最初の行は0)
    • 行が存在するデータファイル(最初のファイルは1)。ファイル番号は表領域を基準にしています。

    Oracleは、ROWIDを内部的に使用して行にアクセスします。たとえば、OracleはROWIDをインデックスに格納し、それを使用してテーブルの行にアクセスします。

    次のようにSELECTコマンドを使用して、行のROWIDを表示できます。

    empからrowid、emp_nameを選択します;

    ROWID EMP_NAME

    AAADC576474722aSAAAジョン

    Oracleは、ROWIDをデコードするためのDBMS_ROWIDというパッケージを提供しています。

    行にROWIDが割り当てられると、Oracleは行の存続期間中ROWIDを変更しません。ただし、テーブルが再構築されると、行がパーティション間を移動するとき、またはテーブルが縮小されるときに変更されます

    Oracleのインデックスの種類と例

    oracleには6種類のインデックスがあります

    (1)Bツリー

    (2)圧縮されたBツリー

    (3)ビットマップ

    (4)機能ベース

    (5)リバースキー(RKI)

    (6)インデックス編成テーブル(IOT)。

    それぞれの詳細と、これらのタイプごとにOracleでインデックスを作成する方法を見てみましょう

    B –ツリーインデックス:

    • Bツリーインデックス(バランスツリー)は、最も一般的なタイプのインデックスです。
    • B-ツリーインデックスは、ROWIDとインデックスキー値をツリー構造に格納しました。
    • インデックスを作成すると、ROOTブロックが作成され、次にBRANCHブロックが作成され、最後にLEAFブロックが作成されます。
    • 各ブランチは、リーフブロックが保持するデータの範囲を保持し、各ルートは、ブランチが保持するデータの範囲を保持します。
    • Bツリーインデックスは、where句(SELECT…WHERE EMPNO =1)に表示される列で最も役立ちます。
    • Oracleサーバーは、新しいデータがテーブルに挿入されたときに、インデックスブロックを分割することでツリーのバランスを保ちます。
    • インデックスのテーブルでDMLステートメントが実行されるたびに、インデックスアクティビティが発生し、インデックスが大きくなります(リーフとブランチを追加します)。

    利点

    • 木のすべての葉のブロックは同じ深さにあります。
    • Bツリーインデックスは自動的にバランスが保たれます。
    • Bツリーのすべてのブロックは平均して4分の3がいっぱいです。
    • Bツリーは、完全一致検索や範囲検索など、さまざまなクエリに対して優れた検索パフォーマンスを提供します。
    • 挿入、更新、削除は効率的で、キーの順序を維持してすばやく取得できます。
    • Bツリーのパフォーマンスは、小さいテーブルと大きいテーブルの両方で良好であり、テーブルのサイズが大きくなっても低下しません。
     CREATE  INDEX  ON …)TABLESPACE ; ExampleCreate index scott.exp_idx on table scott.example(name)Tablespace TOOLS; 

    圧縮されたBツリーインデックスとは

    • 圧縮されたBツリーインデックスは、データウェアハウス環境の大きなテーブル上に構築されます。このタイプのインデックスでは、同じ値の重複オカレンスが排除されるため、インデックスに必要なストレージスペースの量が削減されます。
    • 圧縮されたBツリーインデックスでは、キー値ごとに、ROWIDのリストが保持されます
    • インデックスの作成時にCOMPRESSキーワードを指定すると(CREATEINDEX…COMPRESS)、圧縮されたBツリーインデックスが作成されます。
    • 通常のBツリーインデックスは、COMPRESSキーワードを使用して再構築して圧縮できます。
     CREATE  INDEX  ON …)PCTFREE  TABLESPACE  Compress  

    ビットマップインデックスとは

    • ビットマップインデックスは、(Bツリーインデックスとは対照的に)明確でないカーディナリティデータに最も適しています。
    • このタイプのインデックスは、すべてのインデックス値のバイナリマップを作成し、そのマップをインデックスブロックに格納します。これは、インデックスに必要なスペースがBツリーインデックスよりも少ないことを意味します。
    • ビットマップの各ビットは、可能なROWIDに対応します。ビットが設定されている場合、対応するROWIDを持つ行にキー値が含まれていることを意味します。マッピング関数はビット位置を実際のROWIDに変換するため、ビットマップインデックスは、内部で異なる表現を使用していても、通常のインデックスと同じ機能を提供します。異なるキー値の数が少ない場合、ビットマップインデックスは非常にスペース効率が高くなります
    • テーブルにビットマップインデックスがある場合、更新によって完全なテーブルロックが解除されます。したがって、ビットマップインデックスは、DML(更新頻度が低い)アクティビティが少ない大きな列や読み取り専用テーブルで役立ちます。これが、データウェアハウス環境(DWH)でビットマップインデックスが広く使用されていることがよくある理由です。
    • ビットマップインデックス構造には、列の値を示すビットのマップが含まれます。たとえば、GENDER列の場合、インデックスブロックは開始ROWID、終了ROWID、およびビットマップを保持します。
    • ビットマップインデックスは、カーディナリティの低い列で作成し、クエリ条件でAND&OR演算子を使用すると非常に便利です。
     CREATE BITMAP INDEX  ON …)PCTFREE  TABLESPACE  

     CREATE BITMAP INDEX ON emp_data(gender); SELECT COUNT(*)FROM emp_dataWHERE GENDER =’M”; 

    ビットマップインデックスの利点

    • 大規模なクラスのクエリの応答時間の短縮
    • 他のインデックス作成手法と比較して、スペース使用量が大幅に削減されます
    • 非常にローエンドのハードウェアでも劇的なパフォーマンスの向上
    • 非常に効率的な並列DMLとロード

    関数ベースのインデックス

    関数ベースのインデックスは、関数が通常適用される列に作成されるインデックスです。

    インデックス付きの列で関数を使用する場合、インデックスは無視されるため、関数ベースのインデックスはこれらの操作に非常に役立ちます。

     CREATE INDEX  ON  [Function(; ExampleCREATE INDEX EMP_IDX on EMP(UPPER(ENAME)); SELECT * FROM EmpWHERE UPPER(Ename)like 'JOHN`; 

    リバースキーインデックスとは

    • これらは特殊なタイプのBツリーインデックスであり、連続番号を含む列に作成する場合に非常に便利です。
    • 通常のBツリーを使用すると、インデックスが大きくなり、多くのブランチとおそらくいくつかのレベルが発生するため、パフォーマンスが低下します。RKIは、各列キーのバイトを逆にして新しいデータにインデックスを付けることで問題を解決します。
    • このメソッドは、データをインデックスに均等に分散します。 RKIの作成は、REVERSEキーワードを使用して行われます。CREATEINDEX…ON…REVERSE;
     CREATE INDEX  ON )TABLESPACE  REVERSE; ExampleCREATE INDEX emp_idx i ON emp_table(firstname、lastname)REVERSE; 

    Index Organized Tables(IOT)とは

    • Bツリーを使用している場合、データを順序付けられていない方法で格納するテーブル(ヒープテーブル)には、ビットマップとリバースキーのインデックスが使用されます。
    • これらのインデックスには、必要なテーブル行のROWIDの場所が含まれているため、行データに直接アクセスできます
    • インデックスで整理されたテーブル テーブルのデータが関連するインデックスに保持されるため、通常のテーブルとは異なります。新しい行の追加、行の更新、行の削除など、テーブルデータを変更すると、インデックスが更新されます。
    • インデックス編成テーブルは、1つ以上の列にインデックスがある通常のテーブルに似ていますが、テーブルとBツリーインデックス用に2つの個別のストレージを維持する代わりに、データベースシステムは単一のB-のみを維持します。対応する行のエンコードされたキー値と関連する列値の両方を含むツリーインデックス。行のROWIDをインデックスエントリの2番目の要素として使用するのではなく、実際のデータ行はBツリーインデックスに格納されます。データ行はテーブルの主キーに基づいて構築され、各Bツリーインデックスエントリにはが含まれます。インデックス編成テーブルは、主キーまたは主キーの有効なプレフィックスである任意のキーによってデータにアクセスするのに適しています。
    • キーには非キー列の値のみが格納されるため、キー値の重複はありません。セカンダリインデックスを作成して、他の列による効率的なアクセスを提供できます。アプリケーションは、SQLステートメントを使用して、通常のテーブルと同じようにインデックス編成テーブルを操作します。ただし、データベースシステムは、対応するBツリーインデックスを操作することによってすべての操作を実行します。

    インデックス編成テーブルの機能

    • 主キーは行を一意に識別します。主キーを指定する必要があります
    • 主キーベースのアクセス
    • ROWID疑似列の論理ROWIDにより、セカンダリインデックスを作成できます
    • UNIQUE制約は許可されていませんが、トリガーは許可されています
    • クラスターに保存することはできません
    • LOB列を含めることはできますが、LONG列を含めることはできません
    • 配布とレプリケーションはサポートされていません


     CREATE TABLEコマンド:CREATETABLE…ORGANIZATIONINDEX TABLESPACE…(これがIOTであることを指定)PCTTHRESHOLD…(行データを格納するために保持するブロックの%を指定、有効な0-50(デフォルト50))INCLUDING…(指定行の長さがPCTTHRESHOLDを超えたときに行を分割する列)OVERFLOW TABLESPACE…(行の2番目の部分が格納される表スペースを指定します)MAPPING TABLE; (マッピングテーブルの作成のため、IOTでビットマップインデックスを作成するときに必要です)

    マッピングテーブルは、インデックスの物理ROWIDをIOTの論理ROWIDにマッピングします。データがテーブルに追加またはテーブルから削除されるたびに物理ROWIDが変更されるため、IOTは論理ROWIDを使用してインデックスによるテーブルアクセスを管理します。 IOTを他のインデックスと区別するには、pct_direct_access列を使用してUSER_INDEXESビューにクエリを実行します。この列には、IOTのみがNULL以外の値を持ちます。

    アプリケーションドメインインデックス

    オラクルは拡張可能なインデックス作成を提供します ドキュメント、空間データ、画像、ビデオクリップなどの複雑なデータタイプのインデックスに対応し、特殊なインデックス技術を利用するため。

    拡張可能なインデックスを使用すると、アプリケーション固有のインデックス管理ルーチンをインデックスタイプとしてカプセル化できます スキーマオブジェクトとドメインインデックスの定義 (アプリケーション固有のインデックス)オブジェクトタイプのテーブル列または属性。拡張可能なインデックス作成により、アプリケーション固有の演算子の効率的な処理も可能になります。 s。

    cartridgと呼ばれるアプリケーションソフトウェア e、ドメインインデックスの構造とコンテンツを制御します。 Oracleサーバーはアプリケーションと対話して、ドメインインデックスを構築、保守、および検索します。索引構造自体は、索引構成表としてOracleデータベースに保管することも、外部からファイルとして保管することもできます。

    ドメインインデックスの使用

    ドメインインデックスは、ユーザー定義のインデックスタイプによって提供されるインデックスロジックを使用して構築されます。インデックスタイプは、特定の演算子述語を満たすデータにアクセスするための効率的なメカニズムを提供します。通常、ユーザー定義のインデックスタイプは、SpatialオプションなどのOracleオプションの一部です。

    たとえば、SpatialIndextypeを使用すると、特定の境界ボックスと重なる空間データを効率的に検索および取得できます。

    カートリッジは、ドメインインデックスの作成と保守で指定できるパラメータを決定します。同様に、ドメインインデックスのパフォーマンスとストレージの特性は、特定のカートリッジのドキュメントに示されています。

    これまで、Oracleのさまざまなタイプのインデックスについて例を挙げて説明してきましたが、次に、それらを変更/ドロップ/再作成する方法を確認しましょう

    Oracleでインデックスを再作成/インデックスを再構築する方法

    ALTER INDEX…REBUILDステートメントを使用して、既存のインデックスを再編成または圧縮したり、そのストレージ特性を変更したりできます

    REBUILDステートメントは、既存のインデックスを新しいインデックスの基礎として使用します。

    ALTER INDEX…REBUILDは通常、インデックスを削除して再作成するよりも高速です。

    マルチブロックI/Oを使用してすべてのインデックスブロックを読み取り、ブランチブロックを破棄します。

    このアプローチのさらなる利点は、再構築の進行中も古いインデックスをクエリに使用できることです。

     ALTER index 再構築;Alter index再構築テーブルスペース;

    インデックスの使用を回避するステートメントの記述方法

    • NO_INDEXオプティマイザーヒントを使用して、特定のインデックスの使用を禁止しながら、CBOに最大限の柔軟性を与えることができます。
    • FULLヒントを使用して、オプティマイザにインデックススキャンの代わりに全表スキャンを選択させることができます。
    • INDEX、INDEX_COMBINE、またはAND_EQUALヒントを使用して、オプティマイザに1つのインデックスまたはリストされたインデックスのセットを別のインデックスの代わりに使用するように強制できます。

    インデックスの統計を収集する方法

    インデックス統計は、ANALYZEINDEXまたはdbms_statsステートメントを使用して収集されます。

    使用可能なオプションは、COMPUTE /ESTIMATESTATISTICSまたはVALIDATESTRUCTUREです。

    10g以降、インデックスが作成されると、統計の計算が自動的に行われます

    検証構造を使用する場合、OracleはINDEX_STATSビューに分析されたインデックスに関連する統計を入力します。統計には、リーフの行とブロックの数(LF_ROWS、LF_BLKS)、ブランチの行とブロックの数(BR_ROWS、BR_BLKS)、削除されたリーフの行の数(DEL_LF_ROWS)、使用済みスペース(USED_SPACE)、個別のキーの数(DISTINCT_KEYS)が含まれます。など。これらの統計を使用して、インデックスを再構築する必要があるかどうかを判断できます

    Oracleはインデックスの使用をどのように決定しますか?

    Oracleは、オプティマイザエンジンでインデックスを使用するかどうかを自動的に決定します。

    Oracleは、クエリに応じてインデックスを使用するかどうかを決定します。

    Oracleは、インデックスを使用することで、特定のクエリのパフォーマンスが向上するかどうかを理解できます。 Oracleがインデックスを使用するとパフォーマンスが向上すると判断した場合は、インデックスを使用します。それ以外の場合は、インデックスを無視します。

    この例で理解しましょう

    emp_name、salary、dept_no、emp_no、date_of_joiningを含むテーブルempがあり、emp_nameにインデックスがあります

    クエリ1

     select * from emp where emp_name ='John'; 

    上記のクエリでは、名前に基づいてempに関する情報を取得しようとしているため、インデックスが使用されます。

    クエリ2

     select * from emp; 

    上記のクエリでは、テーブル内のすべての行を検索しようとしているため、インデックスは使用されません。クエリにはwhere句がありません

    クエリ3

     select * from emp where dept_no =5; 

    上記のクエリでは、where句でインデックスのある列が選択されないため、インデックスは使用されません

    クエリ4

     select * from emp where substr(emp_name、1,4)=’XYZW’; 

    where句は列の関数を使用し、emp_name

    には関数インデックスがないため、上記のクエリはインデックスを使用しません。

    オンラインでインデックスを作成または再構築するにはどうすればよいですか?

    Oracleは、古いバージョンの作成プロセス全体を通じて、インデックスが作成されているテーブルをロックするために使用されていました。これにより、インデックスの作成中にテーブルをデータ操作に使用できなくなります。

    8iで、オラクルはインデックスのオンライン再構築を導入しました。オラクルは、インデックスが構築されているテーブルをロックしません。

    オンラインインデックスは、キーワードONLINEを通じて提供されます。

     CREATE  INDEX  ON …)PCTFREE  TABLESPACE  Online; Alter index再構築オンライン;
    >

    基本的に、オンライン再構築では、Oracleはインデックスの作成の開始時と終了時にテーブルをロックします。それは間のトランザクションを可能にします。メカニズムは11gと12cでかなり改善されました

    インデックスの欠点は何ですか

    インデックスは、選択クエリのパフォーマンスを向上させますが、データ操作のパフォーマンスを低下させる可能性もあります。

    テーブルの多くのインデックスは、INSERTSとDELETESを大幅に遅くする可能性があります

    テーブルのインデックスが多いほど、挿入と削除にかかる時間が長くなります。

    同様に、インデックス付きの列を変更するたびに、インデックスを変更する必要があります。

    したがって、インデックスを慎重に選択し、使用されていないものを削除する必要があります。

    インデックスが占める余分なスペースも考慮事項ですが、データストレージのコストが大幅に下がったため、それほど重要ではない可能性があります。

    使用できないインデックスとは

    説明プランを決定する際に、オプティマイザーは使用できないインデックスを無視します

    また、DMLによって維持されません。つまり、更新、挿入、削除によってインデックスが更新されます

    インデックスが使用できない状態になっている理由はいくつか考えられます。テーブルを再構築しましたが、インデックスを再構築しなかった場合、インデックスは使用できない状態になります。インデックスを使用できなくするもう1つの理由は、バルクロードのパフォーマンスを向上させることです。もう1つの理由は、オプティマイザが毎回間違ったインデックスを取得することが重要であるため、使用できないようにすることを決定する可能性があるためです。

    使用できないインデックスまたはインデックスパーティションは、使用する前に再構築するか、削除して再作成する必要があります。テーブルを切り捨てると、使用できないインデックスが有効になります。

    Oracle Database 11gリリース2以降、既存の索引を使用不可にすると、その索引セグメントは削除されます。

    使用できないインデックスの機能は、SKIP_UNUSABLE_INDEXES初期化パラメータの設定によって異なります。

    SKIP_UNUSABLE_INDEXESがTRUE(デフォルト)の場合、次のようになります。

    テーブルに対するDMLステートメントは続行されますが、使用できないインデックスは維持されません。

    UNIQUE制約を適用するために使用される使用できないインデックスがある場合、DMLステートメントはエラーで終了します。

    パーティション化されていない索引の場合、オプティマイザーはSELECTステートメントのアクセス計画を作成するときに使用できない索引を考慮しません。唯一の例外は、インデックスがINDEX()ヒントで明示的に指定されている場合です。

    SKIP_UNUSABLE_INDEXESがFALSEの場合、次のようになります。

    使用できないインデックスまたはインデックスパーティションが存在する場合、それらのインデックスまたはインデックスパーティションを更新する原因となるDMLステートメントはエラーで終了します。

    SELECTステートメントの場合、使用できない索引または使用できない索引パーティションが存在するが、オプティマイザーがそれをアクセス・プランに使用することを選択しない場合、ステートメントは続行します。ただし、オプティマイザーが使用不可の索引または使用不可の索引パーティションを使用することを選択した場合、ステートメントはエラーで終了します。

    インデックスのデータディクショナリビュー

    DBA_INDEXES ALL_INDEXES USER_INDEXES DBAビューは、データベース内のすべてのテーブルのインデックスを記述します。 ALLビューは、ユーザーがアクセスできるすべてのテーブルのインデックスを記述します。 USERビューは、ユーザーが所有するインデックスに制限されています。これらのビューの一部の列には、DBMS_STATSパッケージまたはANALYZEステートメントによって生成された統計が含まれています。
    DBA_IND_COLUMNS ALL_IND_COLUMNS

    USER_IND_COLUMNS

    これらのビューは、テーブルのインデックスの列を記述します。これらのビューの一部の列には、DBMS_STATSパッケージまたはANALYZEステートメントによって生成された統計が含まれています。
    DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS

    USER_IND_EXPRESSIONS

    これらのビューは、テーブルの関数ベースのインデックスの式を記述します。
    DBA_IND_STATISTICS ALL_IND_STATISTICS

    USER_IND_STATISTICS

    これらのビューには、インデックスのオプティマイザ統計が含まれています。

    テーブルのインデックスを見つける方法

     set pagesize 50000 verify off echo offcol table_name head'Table Name' format a20col index_name head'Index Name' format a25col column_name head'Column Name' format a30break on table_name on index_nameselect table_name、index_name、column_namefrom all_ind_columnswhere table_name like upper('&Table_Name ')table_name、index_name、column_position /
    で並べ替え

    インデックスサイズの決定方法

    INDEXのサイズ segment_name ='INDEX_NAME' group bysegment_name;またはselectowner、segment_name、sum(bytes)/1024/1024/1024 as "SIZE inGB"からsegment_name、sum(bytes)/1024/1024/1024を"SIZEinGB"として選択GB "from dba_segments where owner ='SCHEMA_NAME' and segment_name ='INDEX_NAME' group by owner、segment_name; ユーザーのすべてのインデックスのサイズのリスト select segment_name、sum(bytes)/1024/1024/1024 as "SIZE in GB" from user_segments where segment_type ='INDEX' group by segment_name order by "SIZE in GB" desc; ORselect owner、segment_name、sum(bytes)/ 1024 / 1024/1024 as "SIZE in GB" from dba_segments where owner ='SCHEMA_NAME' and segment_type ='INDEX' group by owner、segment_name order by "SIZE in GB"desc;すべてのインデックスのサイズの合計> 所有者、sum(bytes)/1024/1024/1024をdba_segmentsから「SIZEinGB」として選択します。ここで、owner='SCHEMA_NAME'およびsegment_type='INDEX'は所有者ごとにグループ化されます。

    インデックスの決定方法 定義

     set long 4000select dbms_metadata.get_ddl('INDEX'、''、' 

    インデックス統計を決定する方法

     set pages 250set linesize 100set verify offcol table_name format a24 heading'TABLE NAME' col index_name format a23 heading'INDEX NAME' col u format a1 heading'U' col blevel format 0 heading'BL' col leaf_blocks format 999990 heading'LEAF |BLOCKS'coldistinct_keys形式9999990見出し'DISTINCT|KEYS'colavg_leaf_blocks_per_key形式9999990見出し'LEAF| BLKS | / KEY'col avg_data_blocks_per_keyformat9999990見出し'DATA| BLKS | / KEY'rembreak on table_nameremselect table_name、index_name、de 'UNIQUE'、'U'、null)u、blevel、leaf_blocks、distinct_keys、avg_leaf_blocks_per_key、avg_data_blocks_per_keyfrom sys.dba_indexes where table_owner like upper('&owner')and table_name like upper('&table')order by table_owner、table_name; / pre> 

    関連記事

    Oracleの外部テーブル:Oracleでの外部テーブルの使用法、外部テーブルの作成方法、使用方法については、この投稿を確認してください。
    Oracle Create table:テーブルはデータの基本単位です。 Oracleデータベースのストレージ。 Oracle createtableコマンドを使用して外部キー/主キーを使用してテーブルを作成する方法について説明します
    oraclecreatetablespaceステートメント:Oracleでテーブルスペースを作成する方法、それに関連するさまざまな特性、およびさまざまなcreatetablespaceステートメントに関するこの記事
    テーブルのインデックスステータスと割り当てられた列を検索します
    Oracleの仮想インデックス:Oracleの仮想インデックスとは何ですか?用途、制限、利点、およびOracleデータベースのプランの説明を確認するための使用方法、非表示パラメータ_USE_NOSEGMENT_INDEXES
    Oracleインデックスクラスタリング係数:Oracleインデックスクラスタリング係数の計算方法と、それが説明プランに与える影響
    Oracle Partitionインデックス:Oracleパーティションインデックスについて、グローバル非パーティションインデックスとは何ですか?、ローカルプレフィックスインデックスとは何ですか、非プレフィックスローカルインデックス

    推奨コース

    OracleSQLの優れたUdemyコースは次のとおりです。
    Oracle-Sql-ステップバイステップ:このコースでは、基本的なSQL、結合、テーブルの作成とその構造の変更、ビューの作成、ユニオン、ユニオンなどすべてについて説明します。 。 SQL初心者のための素晴らしいコースと必須のコース
    完全なOracleSQL認定コース :これは、SQL開発者のスキルに対応できるようになりたい人にとっては良いコースです。わかりやすい説明コース
    OracleSQLDeveloper:Essentials、Tips and Tricks :OracleSql開発者ツールは多くの開発者によって使用されています。このコースでは、それを効果的に使用して生産的なSQL開発者になるための秘訣とレッスンを提供します。
    Oracle SQL Performance Tuning Masterclass 2020 :パフォーマンスの調整は、重要で最も求められているスキルの1つです。これは、それについて学び、SQLパフォーマンスの調整を開始するための良いコースです


    1. SQL Server Management Studioで実際のCSV形式でエクスポート出力を取得するにはどうすればよいですか?

    2. SQLServerでUPDATEパススルークエリを実行する方法

    3. MS SQL Server 2005でOVERがサポートされていませんか?

    4. SQLclおよびSQL*Plus(Oracle)で「選択されたX行」を削除する方法