PR

【SQL】CREATE INDEX(インデックスの作成)を1分でわかりやすく解説

Database

CREATE INDEX は指定したテーブルのカラムにインデックスを作成するSQL文です。

CREATE INDEX インデックス名 ON テーブル名 (カラム名1, カラム名2,・・・・)

インデックス(index)とは、テーブルの特定の列に対して作成されたデータ構造で、データの検索や並び替えを高速化するために利用されるデータベース管理の仕組みの1つ。

わかりやすく説明すると、辞書の 「目次」 のようなものです。

create index

特定の単語を調べたいときに辞書の1ページ目から探そうとするよりも、目次から辿った方が早いですよね。この「目次」と同じような働きをするのがインデックスです。

そもそも「インデックスとは何か?」を知りたい方は以下のページをご覧ください。

このページではインデックスの作成方法(CREATE INDEX)を初心者向けにわかりやすく1分で解説します。

このページで学べる内容
  • 【前提】インデックスとは?
  • CREATE INDEX の使い方
    • ALTER文を利用したインデックスの作成方法

プログラマーやエンジニアを目指す方であれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。

スポンサーリンク

CREATE INDEX

CREATE INDEX インデックス名 ON テーブル名 (カラム名1, カラム名2,・・・・)

インデックスを作成するには上記の構文を利用します。インデックス名とテーブルのカラムと指定(※指定するカラムが複数ある場合はカンマ区切りで記述)するだけです。

さっそく、具体的な例をお見せします。以下のサンプルテーブルを利用します。

CREATE TABLE Sample_tbl (
ID       INT(3),
AAA      VARCHAR(50),
BBB      VARCHAR(1),
CCC      INT(3),
DDD      INT(3),
EEE      INT(3)
);

/*
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(3)      | YES  |     | NULL    |       |
| AAA   | varchar(50) | YES  |     | NULL    |       |
| BBB   | varchar(1)  | YES  |     | NULL    |       |
| CCC   | int(3)      | YES  |     | NULL    |       |
| DDD   | int(3)      | YES  |     | NULL    |       |
| EEE   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
*/

参考:CREATE TABLE文

-- インデックスの作成
CREATE INDEX idx_1 ON Sample_tbl (ID); 

/* インデックス定義を表示(わかりやすいように一部省略して表示)
+------------+------------+----------+-------------+------+------------+
| Table      | Non_unique | Key_name | Column_name | Null | Index_type |
+------------+------------+----------+-------------+------+------------+
| sample_tbl |          1 | idx_1    | ID          | YES  | BTREE      |
+------------+------------+----------+-------------+------+------------+
*/

複数のカラムにインデックスを作成したい場合は以下のようにカンマ区切りで記述します。

-- インデックスの作成
CREATE INDEX idx_2 ON Sample_tbl (AAA,BBB,EEE);

/* インデックス定義を表示(わかりやすいように一部省略して表示)
+------------+------------+----------+-------------+------+------------+
| Table      | Non_unique | Key_name | Column_name | Null | Index_type |
+------------+------------+----------+-------------+------+------------+
| sample_tbl |          1 | idx_1    | ID          | YES  | BTREE      |
| sample_tbl |          1 | idx_2    | AAA         | YES  | BTREE      |
| sample_tbl |          1 | idx_2    | BBB         | YES  | BTREE      |
| sample_tbl |          1 | idx_2    | EEE         | YES  | BTREE      |
+------------+------------+----------+-------------+------+------------+
*/

ご覧のようにインデックスが作成されました。

ALTER文を利用したインデックスの作成

インデックスは、ALTER TABLECREATE TABLEでも作成することができます。

ALTER文を利用してインデックスを作成することも可能です。

構文ルール

-- インデックスの追加
ALTER TABLE テーブル名 ADD INDEX テーブル名 (カラム名);

サンプルコードがこちら。

-- ID列にインデックスを作成
ALTER TABLE new_tbl_a ADD INDEX idx_1 (ID);

/* インデックス定義を表示(わかりやすいように一部省略して表示)
+------------+------------+----------+-------------+------+------------+
| Table      | Non_unique | Key_name | Column_name | Null | Index_type |
+------------+------------+----------+-------------+------+------------+
| sample_tbl |          1 | idx_1    | ID          | YES  | BTREE      |
+------------+------------+----------+-------------+------+------------+
*/

個人的にはインデックスを作成することを明示的にわかりやすくするよう、ALTER文よりもCREATE INDEXを用いるのがおすすめです。

SQLを1から学習したい方は

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

タイトルとURLをコピーしました