Oracle インデックス作成

Oracle Indekkusu Zuo Cheng



Oracle データベースでは、インデックスは、データベース テーブルでのデータ取得操作の速度を向上させるデータ構造を指します。ただし、これには、追加の書き込み操作とデータベースのストレージ スペースが必要になる場合があります。

データベース インデックスが役立つ場所の一例は、顧客関係管理システムです。







このようなシステムでは、顧客情報を格納するデータベース テーブルを使用できます。これには、名前、住所、支払い方法、連絡先情報などが含まれる場合があります。



テーブルに多くのレコード (おそらく数百万件) が含まれている場合、データベースから特定の顧客情報を検索するには、長い時間とリソースが必要になる可能性があります。これは、特にパフォーマンスが重要なデータベースではマイナスの現象です。



これを回避するために、データベース インデックスを使用できます。





たとえば、データベース システムが名前を使用して特定の顧客の情報をすばやく見つけて取得できるように、顧客の名前の列にインデックスを作成できます。したがって、データベース エンジンは、テーブル内のすべての行と列を調べる代わりに、インデックスのみを使用して顧客情報を検索します。

このチュートリアルでは、Oracle データベースで CREATE INDEX コマンドを使用して新しいインデックスを初期化する方法を学習します。



Oracle Create Index ステートメント

次に、Oracle データベースでの CREATE INDEX ステートメントの構文を示します。

CREATE INDEX index_name
ON table_name (列 1、列 2、...);

上記の構文は、インデックスのキーとして指定された列 (column1、column2 など) を使用して、table_name という名前のテーブルに index_name という名前のインデックスを作成します。

Oracle では、主キーは、テーブル内の各行を一意に識別する列または列のセットです。デフォルトでは、Oracle はテーブルの主キー列に一意のインデックスを自動的に作成して、一意性制約を適用し、主キーの検索のパフォーマンスを向上させます。

ただし、場合によっては、特定のテーブルの新しいインデックスを手動で作成する必要があります。

これを実現する方法の例をいくつか見てみましょう。

Oracle Create Index の例

以下の出力に示すように、従業員情報を含むテーブルがあるとします。

EMPLOYEES から first_name、last_name、salary、hire_date を選択します。

Oracle 単一列のインデックス作成

first_name 列を使用してインデックスを作成するとします。次のようにクエリを実行できます。

EMPLOYEES(FIRST_NAME) にインデックス first_name_lookup を作成します。

この CREATE INDEX ステートメントは、FIRST_NAME 列をインデックスのキーとして使用して、EMPLOYEES テーブルに first_name_lookup という名前のインデックスを作成します。このインデックスを使用して、従業員を名前で検索するクエリのパフォーマンスを向上させることができます。

インデックスを作成したら、次に示すように、それを使用して特定の従業員を検索できます。

SELECT 名、姓、給与、雇用日
従業員から
WHERE first_name = 'ウィリアム';

結果:

first_name_lookup インデックスがないと、データベース システムは EMPLOYEES テーブル全体をスキャンして、FIRST_NAME カラムが「William」に等しいすべての行を検索する必要があります。ただし、インデックスが配置されていれば、データベース システムは EMPLOYEES テーブル内の行をすばやく検索できます。 「John」値をキーとして使用してインデックスを作成し、要求された行をテーブルから取得します。これにより、はるかに高速になります。

次のように、explain plan コマンドを使用してクエリを作成するときに使用される手順を表示できます。

SELECT first_name、last_name、salary、hire_date の計画を説明する
従業員から
WHERE first_name = 'ウィリアム';

結果のクエリ プラン:

例 2 – Oracle は複数の列を持つインデックスを作成します

同様に、特定のテーブルに複数の列で構成されるインデックスを作成できます。たとえば、first_name 列と last_name 列で構成されるインデックスを作成するとします。

次のようにコードを使用できます。

EMPLOYEES(FIRST_NAME, LAST_NAME) にインデックス multi_lookup を作成します。

この CREATE INDEX ステートメントは、インデックスのキーとして FIRST_NAME 列と LAST_NAME 列を使用して、EMPLOYEES テーブルに multi_lookup という名前のインデックスを作成します。

作成したら、次のサンプル クエリに示すように、このインデックスを使用できます。

SELECT 名、姓、給与、雇用日
従業員から
WHERE first_name = 'William' AND last_name = 'Smith';

結果の値:

また、インデックスを使用して検索範囲を制限することで、データベース クエリを高速化する方法もあります。

結論

Oracle の CREATE INDEX ステートメントを使用すると、テーブルにインデックスを作成して、データ取得操作のパフォーマンスを向上させることができます。ただし、インデックスはクエリのパフォーマンスを向上させることができますが、記憶域スペースのペナルティも発生し、書き込み速度の低下につながります。必要な場合にのみ使用してください。