ララベルのマイグレーションファイルの中で
$table->unique(['user_id', 'age'])
に遭遇し、カラムが二つ????と疑問に思ったので、調べた。
そもそもMYSQLにおけるインデックスとは
- テーブルのデータを並び替える
- 検索が早くなる
下記のようなテーブルで、user_id=4
のものを取得しようとすると、user_id
は上からバラバラに並んでいるため、全件検索してuser_id=4
に該当するものを探す。
select * from ages where user_id = 4
agesテーブル
id | user_id | age |
---|---|---|
1 | 1 | 20 |
2 | 4 | 21 |
3 | 2 | 20 |
4 | 3 | 19 |
5 | 4 | 11 |
6 | 1 | 55 |
user_id
でインデックスを作れば、下記のテーブルのようにuser_id
順で並び変えられ、効率よく検索してくれるので、検索スピードが速くなる。
select * from ages where user_id = 4
id | user_id | age |
---|---|---|
1 | 1 | 20 |
6 | 1 | 55 |
3 | 2 | 20 |
4 | 3 | 19 |
2 | 4 | 21 |
5 | 4 | 11 |
インデックス
$table->unique('user_id')
キー:user_id | id |
---|---|
1 | 1 |
6 | |
2 | 3 |
3 | 4 |
4 | 2 |
5 |
では、MYSQLの複合インデックスとは
下記のようにインデックスが作られるため、$table->unique(['user_id', 'age'])
のようなインデックスの場合は、
select * from ages where user_id = 4 order by age
で検索する時に、効率がよくなる。
複合インデックス
$table->unique(['user_id', 'age'])
キー:user_id | キー:age | id |
---|---|---|
1 | 20 | 1 |
55 | 6 | |
2 | 20 | 3 |
3 | 19 | 4 |
4 | 11 | 2 |
21 | 5 |
参考サイト
MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) - Qiita
#書いてあることインデックス…?INDEXって何それ(゚Д゚)?レベルの人が最低限、MySQLのクエリチューニングなどできるようになるための取っ掛かり/リンク集です。初心者が取っ掛かりにする程…
DBのインデックスと複合インデックス - Qiita
#Q:インデックスとは?データの並び順序のこと初期状態では主キーに対してインデックスが割り当てられている。#Q:インデックスをつける意味は?データ件数が多いテーブルの検索を早くすることができ…
404 Not Found - Qiita - Qiita
複合インデックスの正しい列の順序
SQLにおける列の順序は重要です。正しい順序にすると、多くのクエリに 便利に使うことができる一方、間違った順序にしてしまうと特定のクエリにしか 使えなかったり、全く使えなくなってしまいます。
SELECT文の評価順序の話 - Qiita
はじめにこの投稿はアイスタイル Advent Calendar 2015の25日目の記事です。最終日の記事になりますが、今回もDBAの@toshifusaが、RDBMS関連の話題を、地味に淡々と…
複合インデックスの落とし穴 | がっとな日々 | ガットコンピューター
コメント