テーブル作成時にインデックスを作成する(INDEX)

MySQL ではテーブル作成時にインデックスを同時に作成するように記述することができます。ここでは MySQL でテーブル作成時にインデックスを作成する方法について解説します。

テーブルを作成したあとにインデックスを作成したり、作成したインデックスを削除する方法については「インデックスの作成」を参照してください。

(Last modified: )

インデックスを作成する

テーブルを作成するときにインデックスを同時に作成することができます。基本となる書式は次の通りです。

CREATE TABLE db_name.tbl_name
  (col_name data_type, ..., INDEX [index_name] (col_name, ...))

INDEX のあとに対象となるカラム名を指定してください。インデックスが作成されます。インデックス名( index_name )は省略可能です。省略した場合は対象となるカラム名などから自動的にインデックス名が付けられます。

では実際に試してみます。次のようなテーブルを作成します。

create table staff(id int, name varchar(10), index id_index (id));

インデックスを作成する(1)

作成したテーブルのカラム情報を取得してみます。

show columns from staff;

インデックスを作成する(2)

Key カラムの値をみていただくと、 INDEX が作成された id カラムには MUL と表示されています。

また作成されたインデックスについて SHOW INDEX文を使って確認してみます。

show index from staff\G

インデックスを作成する(3)

作成されたインデックスは Non_unique が 1 となっており、インデックスの対象となっているカラムでは重複した値を格納することができます。

-- --

ではテーブルにデータを追加します。インデックスを作成したことで制限が増えているわけではないので、インデックスを作成していない時と同じようにデータを追加できます。

insert into staff values(1, 'Yamada');
insert into staff values(4, 'Suzuki');
insert into staff values(NULL, 'Harada');
insert into staff values(4, 'Kuraki');

インデックスを作成する(3)

インデックスを作成した対象のカラムに既存のデータと重複する値のデータを追加したり、 カラムの値が NULL のデータを追加することができました。

複数のカラムの組み合わせに対してインデックスを作成する

インデックスの対象となるカラムは 1 つだけではなく 複数のカラムの組み合わせに対して設定することができます。

1 つまたは複数のカラムを対象としたインデックスを作成するには次の書式を使用します。

CREATE TABLE db_name.tbl_name
  (col_name1 data_type, col_name2 data_type, ...,
   INDEX [index_name] (col_name1, col_name2, ...))

では実際に試してみます。次のようなテーブルを作成します。

create table staff(joiny int, id int, name varchar(10), index joiny_id_index (joiny, id));

複数のカラムの組み合わせに対してインデックスを作成する(1)

作成したテーブルのカラム情報を取得してみます。

show columns from staff;

複数のカラムの組み合わせに対してインデックスを作成する(2)

Key カラムの値をみていただくと、 INDEX が作成された joiny カラムには MUL と表示されています。今回は複数のカラムの組み合わせに対してインデックスを作成していますが、最初のカラムに MUL が設定されるようです。

どのカラムに対してインデックスが作成されているのかを確認するには SHOW CREATE TABLE 文を使うと確認できます。

show create table staff\G

KEY joiny_id_index (joiny,id) と表示されているように joiny カラムと id カラムの組み合わせに対してインデックスが作成されていることが確認できます。( KEY は INDEX の別名です)。

複数のカラムの組み合わせに対してインデックスを作成する(3)

また作成されたインデックスについて SHOW INDEX文を使って確認してみます。

show index from staff\G

複数のカラムの組み合わせに対してインデックスを作成する(4)

同じインデックス名がついた 2 つのインデックスが作成されています。違いは 1 つめのインデックスは Column_name の値が joiny なのに対して、 2 つめのインデックスは Column_name の値が id になっています。

-- --

テーブルを作成する時に同時にインデックスを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。