いまいち理解していないインデックスについて勉強中、、、。
自分なりにまとめてみた。
##インデックスとは
DBのテーブルに大容量のデータがあるとき、高速で目的のデータを取り出すためのもの。
頻繁に検索対象になるカラム(webサービスとかの利用者テーブルならログインIDとか、、)を取り出して、その並び順を格納したもの
SQLのWHERE句とかIN句とか<、>を使うときに使用される。
インデックスを使った方が早いとか、使わない方が早いとかは勝手に自動判断してくれるらしい、、。
##メリットもデメリットもある
インデックスは索引みたいなもの!索引があった方が検索は早くなる。とくにデータ量が多い時なら。
しかし、データ量が然程多くないなら、あまりインデックスは効果を発揮しない。
それどころか、UPDATEやINSERT処理はオーバーヘッドが生じてしまう。つまり、インデックスを再作成する処理が+αで走るので逆に時間がかかる。
しかし、大容量のテーブル程UPDATEよりSELECT処理の方が負荷が高いのでインデックスを使った方がいい。
##複合インデックス
複数のカラムをインデックスに用いたもの。
例えばこんな感じに使う↓
ユーザーテーブル(インデックス:ログインID、パスワード)
ログインID | パスワード | 名前 | 登録日時 | 更新日 |
---|---|---|---|---|
001a | aaaaa | 佐藤 | 2020/01/01 00:00:00 | 2020/03/01 00:00:00 |
002b | bbbbb | 伊藤 | 2020/01/02 00:00:00 | 2020/03/02 00:00:00 |
003c | ccccc | 後藤 | 2020/01/03 00:00:00 | 2020/03/03 00:00:00 |
004d | ddddd | 加藤 | 2020/01/04 00:00:00 | 2020/03/04 00:00:00 |
こんなテーブルがあったとき、SQL分のWHERE句が
・WHERE ログインID = ? AND パスワード = ?
・WHERE ログインID = ?
ならインデックス使える!でもインデックスの2個目のカラムであるパスワードから始まっていたら使えない。↓
・WHERE パスワード = ?