テーブルに格納されているレコードを高速に取り出すための仕組み
以下のようなO(n)問題を抱えたクエリがあるとする。
SELECT * FROM users WHERE first_name = ‘Tom’
このクエリのパフォーマンスを上げるためには、以下のようにIndexを貼る。
ALTER TABLE users ADD INDEX (first_name)
データの作成・更新時には、同時にインデックスの追加・更新も行われるため、上記のようなデメリットが生じる。
ALTER TABLE users ADD INDEX (first_name)
容量の増加を抑えつつ、性能を向上させたい時に有効なパターン
最初の4バイトだけにインデックスを貼る例ALTER TABLE users ADD INDEX (first_name(4))
ALTER TABLE users ADD INDEX (last_name, first_name)
MySQLでは、1つのクエリを実行する際、1テーブルについて1インデックスしか使用できないが、マルチインデックスを適用していれば、有効なインデックスがクエリ実行の際に選択される。
NULLを除いて値が重複して出現しなくなる。
レコードの作成・更新において、全ての値を調べて同じ値が既に存在しないことを確認する。
MySQLでは、ユニークキーを指定するとユニークインデックスも指定される。
ALTER TABLE users ADD UNIQUE (first_name)
EXPLAIN句でクエリの実行計画を確認。
EXPLAIN SELECT * FROM users WHERE first_name = ‘Tom’
以下の項目を確認