ララベルのマイグレーションファイルの中で
$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 |
参考サイト
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9TXlTUUwlRTMlODElQTclRTMlODIlQTQlRTMlODMlQjMlRTMlODMlODclRTMlODMlODMlRTMlODIlQUYlRTMlODIlQjklRTMlODIlOTIlRTglQjIlQkMlRTMlODIlOEIlRTYlOTklODIlRTMlODElQUIlRTglQUElQUQlRTMlODElQkYlRTMlODElOUYlRTMlODElODQlRTMlODMlOUElRTMlODMlQkMlRTMlODIlQjglRTMlODElQkUlRTMlODElQTglRTMlODIlODElMjglRTUlODglOUQlRTUlQkYlODMlRTglODAlODUlRTUlOTAlOTElRTMlODElOTElRUYlQkMlODkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWYxYmYyMGE0NzEwYWMyZWEzMzUxZDQzNjY4NTE0MGYx&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBDMDU4JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1kMGIwNmI4YzU0ZTAwZGIwYmFhNDY3MGFjNTAyOGZjYg&blend-x=142&blend-y=486&blend-mode=normal&s=ee0083890d77305f4a13b1d3cf1f4c79)
MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) - Qiita
#書いてあることインデックス…?INDEXって何それ(゚Д゚)?レベルの人が最低限、MySQLのクエリチューニングなどできるようになるための取っ掛かり/リンク集です。初心者が取っ掛かりにする程…
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9REIlRTMlODElQUUlRTMlODIlQTQlRTMlODMlQjMlRTMlODMlODclRTMlODMlODMlRTMlODIlQUYlRTMlODIlQjklRTMlODElQTglRTglQTQlODclRTUlOTAlODglRTMlODIlQTQlRTMlODMlQjMlRTMlODMlODclRTMlODMlODMlRTMlODIlQUYlRTMlODIlQjkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTc4NzRhZmFhNDhiYmFhMTA2ODczMTM1MTk0NzBiNDI1&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0b3d0b3cmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWZmMGI3NWI5YWMyNjI5YTJmMTM0MDUwYjhlODk5ZmZj&blend-x=142&blend-y=486&blend-mode=normal&s=c4338634e641bb5f1fed178df5320ad5)
DBのインデックスと複合インデックス - Qiita
#Q:インデックスとは?データの並び順序のこと初期状態では主キーに対してインデックスが割り当てられている。#Q:インデックスをつける意味は?データ件数が多いテーブルの検索を早くすることができ…
404 Not Found - Qiita - Qiita
![](https://use-the-index-luke.com/static/util_squirrel.og.fMeqdSQq.png)
複合インデックスの正しい列の順序
SQLにおける列の順序は重要です。正しい順序にすると、多くのクエリに 便利に使うことができる一方、間違った順序にしてしまうと特定のクエリにしか 使えなかったり、全く使えなくなってしまいます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9U0VMRUNUJUU2JTk2JTg3JUUzJTgxJUFFJUU4JUE5JTk1JUU0JUJFJUExJUU5JUEwJTg2JUU1JUJBJThGJUUzJTgxJUFFJUU4JUE5JUIxJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz0zZTk5ZDJkNzcwZTQ3NTg3ZWEyM2RkZmNjNzFkOGU3Yg&mark-x=120&mark-y=96&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBzdXp1a2l0byZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9N2MxZmMyNGMwMTMyMTMwMzI5NjZjZWFiMDdmYWUwNDU&blend-x=120&blend-y=500&blend-mode=normal&s=c1e14101d7a65bf08a782931bec6b5ec)
SELECT文の評価順序の話 - Qiita
はじめにこの投稿はアイスタイル Advent Calendar 2015の25日目の記事です。最終日の記事になりますが、今回もDBAの@toshifusaが、RDBMS関連の話題を、地味に淡々と…
複合インデックスの落とし穴 | がっとな日々 | ガットコンピューター
コメント