インデックスとは?
状態:-
閲覧数:1,195
投稿日:2017-03-28
更新日:2017-03-28
データ保存する際、「指定したカラムの値」と「そのデータの保存位置情報」を本の索引のような構造で保存しておき、目的のデータを抽出するときにその索引を使って探すことができる仕組み
フルテーブルスキャン
・「テーブル内の全データを1件ずつ順番に見ていき、条件に合うデータだけを抽出する」という動作を行う
・この動作のことを「フルテーブルスキャン」と呼ぶ
・データテーブルとは別に、検索用に最適化された状態でデータが保存される
INDEXを使用すると?
・目的レコードを迅速に見つけて取得することが可能
・フルテーブルスキャンを行うよりも早くデータを抽出することができる
MySQLでは
・1クエリを実行するとき、1テーブルにつき1インデックスのみ使用可
1テーブルにつき複数インデックス使用している場合は?
・MySQLは、経験に基づく推測により、何れか一つを選択する
マルチカラムインデックス
・1インデックスにつき複数カラムを指定することもできる
・複合インデックス、合成インデックスと呼ぶこともある
INDEXを作成しないとどうなるの?
フルテーブルスキャン
・「テーブル内の全データを1件ずつ順番に見ていき、条件に合うデータだけを抽出する」という動作を行う
・この動作のことを「フルテーブルスキャン」と呼ぶ
INDEXを作成すると?
・データテーブルとは別に、検索用に最適化された状態でデータが保存される
INDEXを使用すると?
・目的レコードを迅速に見つけて取得することが可能
・フルテーブルスキャンを行うよりも早くデータを抽出することができる
MySQLでは
・1クエリを実行するとき、1テーブルにつき1インデックスのみ使用可
1テーブルにつき複数インデックス使用している場合は?
・MySQLは、経験に基づく推測により、何れか一つを選択する
マルチカラムインデックス
・1インデックスにつき複数カラムを指定することもできる
・複合インデックス、合成インデックスと呼ぶこともある
InnoDB のインデックス
2種類
クラスタインデックス
・主キーインデックス
セカンダリインデックス
・クラスタインデックス以外のすべてのインデックス
クラスタインデックス Clustered index
全てのInnoDBテーブルで存在する特別なインデックス
・主キーとそれ以外の列値がそのまま保存されている
・そのため、インデックスの値を読めば即、その他の列値も取得できる
セカンダリインデックス Secondary Index
インデックスを検索することで主キーの値が分かる
・その主キーの値を使って、その他の列値の値を知ることが出来る
・8.3.1 MySQL のインデックスの使用の仕組み
MySQL インデックス (PRIMARY KEY、UNIQUE、INDEX、および FULLTEXT)
PRIMARY KEY
テーブル上で PRIMARY KEY を定義すると
・InnoDB ではそれがクラスタ化されたインデックスとして使用される
UNIQUE
INDEX
FULLTEXT インデックス
テキストベースのカラム (CHAR、VARCHAR、または TEXT カラム) 上に作成されたインデックスのタイプ
使用すると?
・ストップワードとして定義されている任意の単語が省略されることで、これらのカラム内に含まれるデータ上での InnoDB のクエリーおよび DML 操作の速度を上げる際に役立つ
実装方法
・CREATE TABLE ステートメントの一部として定義することも、あとで ALTER TABLE または CREATE INDEX を使用して追加することもできる