目次

01 MySQL インデックス

MySQLでカラムにインデックスをつけておくと検索が早くなる。

インデックスを作成した方が良い

  1. テーブル内のデータ量が多く、少量のレコードを検索する場合
  2. WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する。
    ただし全表走査が目的のテーブルであれば索引は不要
  3. NULL値が多いデータから、NULL値以外の検索をする
    indexはNULLを含まないのでNULL値以外の検索には効果がある

インデックス作成しない方が良い

  1. 表の規模が小さいか、表から大部分のレコードを検索する場合
  2. WHERE句等の条件としてあまり仕様されないもの
  3. 列の値が頻繁に挿入、更新、削除される
    Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。
    そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナンス作業が発生し、速度低下につながる
  4. WHERE句の条件として使用されるが、列が式の一部として参照される

インデックス作成方法

MySQLでは1つのクエリを実行するとき1つのテーブルにつき1つのインデックスしか使用できない。
よって、単に2つのインデックスを作成してしまうとどちらか一つを選択する。
マルチカラムインデックスを使えば、複数のカラムにインデックスを使用できる

ALTERでインデックス作成

mysql> ALTER TABLE hogehoge ADD INDEX index_hoge(created);

マルチカラムインデックス

mysql> ALTER TABLE hogehoge ADD INDEX index_name(name, created);

テーブル作成時

  mysql> create table cloudstack_domain_resource(
	id int not null  auto_increment,
        name text not null
	created_at datetime not null,
	primary key (id),
	key index_date(created_at),
	key index_domain(domain,created_at)
  ) ENGINE=InnoDB;