MySQLのSelect文でインデックスのカラムのみ取得する場合のメリットについてです。
1)概要
・where句でインデックスのカラムを指定する事によって、その行を効率的に検索する事が出来るが、インデックスはそのカラムのデータを含むので、Select文が取得する項目がwhere句で指定したインデックスのカラムのみの場合は、行全体のデータを取得する必要が無くなり、負荷を軽減する事が出来る。
・インデックスのカラムの値を含む場合に限られるので、B-Treeインデックスは当てはまるが、Hash、spatial、full-textインデックスの場合は当てはまらない。
2)メリット
・インデックスの項目は行全体のサイズと比べるとサイズが小さくなるので取得するデータ量を軽減できる。
データ量が少なくなるとキャッシュからのコピーやIOバウンドの場合に負荷を軽減できる。
・インデックスはインデックスの値によってソートされているので、範囲検索などの場合、行全体の範囲検索と比べて(各行はディスク内にランダムに保存されているので)負荷を軽減できる。
特にMyISAMの場合は、”OPTIMIZE TABLE”によって完全にソートされたインデックスを取得出来るので、順次アクセスと同様になる。 関連記事の目次