インデックス
インデックスとは
インデックスは、テーブルに関連付けられたオプションの構造です。これは、データにすばやくアクセスし、データベースのパフォーマンスを向上させる方法です。データベースは明示的にインデックスを作成して、テーブルでのSQLステートメントの実行を高速化できます。インデックスキーがクエリ条件として使用される場合、インデックスはこれらの値を含む行の位置を直接指します。インデックスが削除されても、SQLステートメントを変更する必要はありません。定義
インデックス分類
物理的分類 | 論理的分類 |
---|---|
パーティション化または非パーティション化インデックス | 単一列または複合インデックス |
Bツリーインデックス | 一意または非一意のインデックス |
ノーマルまたはリバースキーインデックス | 機能指標に基づく |
ビットマップインデックス |
Bツリーインデックス
Bツリーインデックスは通常、標準インデックスとも呼ばれます。インデックスの上部はで、インデックス根
の次のレベルを指すアイテムが含まれています。次のレベルはブロックに分割され、分割されたブロックはインデックスの次のレベルのブロックを指します。最下位レベルは叶节点
、テーブルの行を指すインデックスエントリを含むです。リーフブロックは双向链表
、キーワードの昇順と降順でインデックスをスキャンするのに役立ちます
SQL>create [unique] index_name on table_name(column_list)
[tablespace tablespace_name]
- unique
:一意のインデックスを指定するために使用されます。デフォルトでは一意ではないインデックス
- index_name
です:インデックス名
- table_name
:テーブル名
- column_list
:列名、コンマで区切って複数の列にすることができます
- tablespace_name
:インデックスのテーブルスペースを指定します
一意のインデックスと非一意のインデックス
- 一意のインデックス:
インデックスを定義する列のどの2行にも重複する値はありません。一意のインデックスのインデックスキーは、テーブルの1つの行のみを指すことができます。主キー制約を作成して一意の制約を作成するときに、対応する一意のインデックスを作成します
- 一意でないインデックス:
1つのキーワードに複数の行を関連付けることができます
キーインデックスを逆にする
与常规B树索引相反,反向键索引在保持列顺序的同时反转列的字节。反向索引通过反转索引
键的数据值来实现,其优点是对于连续增长的索引列,反转索引列可以将索引数据分散在多
个索引块间,减少I/O瓶颈的发生。
SQL>create unique index_reverse_name on table_name(column_list) REVERSE;
逆行する
ビットマップインデックス
ビットマップインデックスの利点は、それが最も適していることです
低基数列
(この列の値は有限であり、理論的には無限ではありません)。たとえば、従業員テーブルのジョブの種類(ジョブ列)は、何百万もの従業員レコードがある場合でも、ジョブの種類も計算可能であり、ジョブの種類位图索引
列はブックテーブルのカテゴリ列として使用できます。
ビットマップインデックスには次の利点があります
- 多数のインスタントクエリの場合、応答時間を短縮できます
- 他のインデックス技術と比較して、占有スペースが大幅に削減されます
- 構成が非常に低い端末ハードウェアでも、かなりのパフォーマンスを得ることができます
。ビットマップインデックスはrowIdを直接格納しませんが、バイトビットのrowIdへのマッピングを格納するため、応答時間が短縮され、スペースが節約されます。
位图索引
多発に適用されるべきではないinsert
、update
、delete
手術台の上に、DML操作は、パフォーマンスの面で高価であり、ビットマップ・インデックスは、倉庫データと意思決定支援システムに最適です
SQL>create bitmap index index_bit_name on table_name(column_name)
その他のインデックス
- 複合インデックス:テーブル内の複数の列にインデックスを作成します。インデックス内の列は、テーブル内の列と同じ順序である必要はなく、互いに隣接している必要もありません。
- シナリオの使用:フィルタキー述語として使用されるSQLステートメントのwhere句で、特定のフィールドがand演算子と組み合わされることが多い場合
- 複合インデックスフィールドの並べ替えの原則
- 最も
频繁
使用されるフィールドが最初に来る - 同じ周波数を使用し、最も多くの
选择性
フィールドを最初に配置します
- 最も
- 関数ベースのインデックス:使用される関数または式に、作成中のテーブルの1つ以上の列が含まれる場合、関数ベースのインデックスが作成されます。関数に指定されたインデックスは、Bツリーまたはビットマップインデックスとして作成できます。
- 式に集計関数を含めることはできません。
- LOBタイプの列には作成できません。
- 作成時にQUERTREWRITE権限が必要です
インデックス使用の原則
- テーブルにデータをインポートした後、インデックスを作成します。それ以外の場合は、データがテーブルに挿入されるたびにインデックスを更新する必要があります
- 適切なテーブルとフィールドにインデックスを作成します。頻繁に取得されるデータがテーブルの15%未満の場合は、インデックスを作成する必要があります。
- テーブル内のインデックスの数を制限します。インデックスが多いほど、テーブルを変更する際のインデックス変更の作業負荷が大きくなります。
総括する
- Bツリーインデックスは一般的なインデックスであり、インデックスを作成するときのデフォルトのインデックスタイプです。
- リバースキーインデックスは、値が継続的に増加している列に基づいて作成されます
- ビットマップインデックスは、カーディナリティの低い列での作成に適しています
- 機能指標に基づく
- インデックス使用の原則