MYSQLの複合インデックス ララベル

※当ブログの記事内にはプロモーションが含まれている場合があります。

ララベルのマイグレーションファイルの中で

$table->unique(['user_id', 'age'])

に遭遇し、カラムが二つ????と疑問に思ったので、調べた。

そもそもMYSQLにおけるインデックスとは

  • テーブルのデータを並び替える
  • 検索が早くなる

下記のようなテーブルで、user_id=4のものを取得しようとすると、user_idは上からバラバラに並んでいるため、全件検索してuser_id=4に該当するものを探す。

select * from ages where user_id = 4

agesテーブル

iduser_idage
1120
2421
3220
4319
5411
6155

user_idでインデックスを作れば、下記のテーブルのようにuser_id順で並び変えられ、効率よく検索してくれるので、検索スピードが速くなる。

select * from ages where user_id = 4
iduser_idage
1120
6155
3220
4319
2421
5411

インデックス

$table->unique('user_id')
キー:user_idid
11
6
23
34
42
5

では、MYSQLの複合インデックスとは

  • 複数の条件で並び替えを行うインデックス
  • SQLの評価順序を意識して使わないと意味ない
  • インデックスの順番を間違えると、逆に遅くなる場合もある

下記のようにインデックスが作られるため、$table->unique(['user_id', 'age'])のようなインデックスの場合は、

select * from ages where user_id = 4 order by age

で検索する時に、効率がよくなる。

複合インデックス

$table->unique(['user_id', 'age'])
キー:user_idキー:ageid
1201
556
2203
3194
4112
215

参考サイト

MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) - Qiita
#書いてあることインデックス…?INDEXって何それ(゚Д゚)?レベルの人が最低限、MySQLのクエリチューニングなどできるようになるための取っ掛かり/リンク集です。初心者が取っ掛かりにする程…
DBのインデックスと複合インデックス - Qiita
#Q:インデックスとは?データの並び順序のこと初期状態では主キーに対してインデックスが割り当てられている。#Q:インデックスをつける意味は?データ件数が多いテーブルの検索を早くすることができ…
404 Not Found - Qiita - Qiita
複合インデックスの正しい列の順序
SQLにおける列の順序は重要です。正しい順序にすると、多くのクエリに 便利に使うことができる一方、間違った順序にしてしまうと特定のクエリにしか 使えなかったり、全く使えなくなってしまいます。
SELECT文の評価順序の話 - Qiita
はじめにこの投稿はアイスタイル Advent Calendar 2015の25日目の記事です。最終日の記事になりますが、今回もDBAの@toshifusaが、RDBMS関連の話題を、地味に淡々と…
複合インデックスの落とし穴 | がっとな日々 | ガットコンピューター

コメント

タイトルとURLをコピーしました