RDBのIndexことはじめ
はじめに
自分の知識はDBに対してIndexを貼るとパフォーマンスが向上するらしいという程度。
恥ずかしながらこれまで、あまり意識してIndexを設定していなかった。
基本的なところを整理する。
参考サイト
https://www.dbonline.jp/sqlite/index/index1.html
Indexとは
対象のカラムを検索する場合に早くする
例えば、name カラムがあり、
Indexの方式(アルゴリズム)
いろんな種類がある。
https://ja.wikipedia.org/wiki/%E7%B4%A2%E5%BC%95_%28%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%29
使用しているDBのアルゴリズムと、対象カラムの使い方にそってIndexを貼っていく必要がある
Indexのメリット・デメリット
Indexの生成にコストがかかる。
データ(row)を増減・更新したときに、Indexを生成・更新する。
このため、indexを付与した場合、対象テーブルのwrite処理が遅くなる。
基本方針
・対象カラムを頻繁に検索利用する場合(SQL の whereで使用)
・writeよりもreadされるもの。(頻繁にwriteされるものは避ける)
具体例を考える
例1 チャットアプリで、チャットメッセージTableを作る
チャットメッセージTableに下記カラムがあったとする。
id
from_user_id
to_user_id
comment
このテーブルでcommentカラムにindexを貼るかを考える。
チャットメッセージに対して検索機能を付与していないような場合は、
・commentで検索しない(whereとして利用しない)
・頻繁にwriteされる(チャットアプリなのでメッセージは頻繁に作成)
このため、commentにindexは貼る必要がない
この記事が気に入ったらサポートをしてみませんか?