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:インデックスをつける意味は? データ件数が多いテーブルの検索を早くすることができる。 例えば下記の社員テー...
SQLにおける複合INDEXの順番について - Qiita
更新履歴 2019/09/07:INDEXについての説明を修正しました はじめに SQLのチューニングについて勉強していたら「これは意識しないとな」というものがあったので書き留めたいと思います。 要約 複合INDEX...
複合インデックスの正しい列の順序
SQLにおける列の順序は重要です。正しい順序にすると、多くのクエリに 便利に使うことができる一方、間違った順序にしてしまうと特定のクエリにしか 使えなかったり、全く使えなくなってしまいます。
SELECT文の評価順序の話 - Qiita
はじめに この投稿はアイスタイル Advent Calendar 2015の25日目の記事です。 最終日の記事になりますが、今回もDBAの@toshifusaが、RDBMS関連の話題を、地味に淡々と書かせていただきます。 ...
複合インデックスの落とし穴 | がっとな日々 | ガットコンピューター

コメント