====== 01 MySQL インデックス ====== MySQLでカラムにインデックスをつけておくと検索が早くなる。 ===== インデックスを作成した方が良い ===== - テーブル内のデータ量が多く、少量のレコードを検索する場合 - WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する。\\ ただし全表走査が目的のテーブルであれば索引は不要 - NULL値が多いデータから、NULL値以外の検索をする \\ indexはNULLを含まないのでNULL値以外の検索には効果がある ===== インデックス作成しない方が良い ===== - 表の規模が小さいか、表から大部分のレコードを検索する場合 - WHERE句等の条件としてあまり仕様されないもの - 列の値が頻繁に挿入、更新、削除される \\ Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。 \\ そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナンス作業が発生し、速度低下につながる - 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; {{tag>mysql}}