CREATE INDEX の使い方

検索を速くする

書き方

CREATE [UNIQUE] INDEX 名前 ON 表 (列, …);
DROP INDEX 名前;

よく WHERE や JOIN に使う列に作ると検索が速くなります。UNIQUE INDEX は重複を許しません。

よく使うオプション

オプション意味
CREATE INDEX 名前 ON 表 (列)列にインデックスを作る
UNIQUE重ならないことも守らせる
(列, 列)いくつかの列の組み合わせで作る(複合インデックス)
DROP INDEX 名前インデックスを消す

例

CREATE INDEX idx_employees_dept ON employees (dept_id);CREATE INDEX

部署で社員を探すことが多いので、dept_id にインデックスを作ります。WHERE dept_id = … や JOIN が速くなります。

CREATE UNIQUE INDEX idx_customers_phone ON customers (phone);

電話番号が重ならないようにし、電話番号での検索も速くします。

CREATE INDEX idx_orders_cust_date ON orders (customer_id, ordered_on);

「この客の、この期間の注文」をよく探すときの複合インデックスです。

EXPLAIN SELECT * FROM employees WHERE dept_id = 2;

インデックスが使われているかを確かめます。Index Scan や Bitmap Index Scan と出れば使われています。

よくある間違い・注意

  • インデックスは、増やすほど INSERT や UPDATE が遅くなり、場所もとります。よく探す列だけに作ります。
  • 複合インデックスは、先頭の列を条件に使わないと効きにくくなります(customer_id を使わず ordered_on だけで探すときなど)。
  • 行の少ない表では、インデックスがあっても全部を読むほうが速いので、使われないことがあります。

実際に打って練習する

SQL コースの Lv47「速く探す INDEX」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る