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は貼る必要がない

この記事が気に入ったらサポートをしてみませんか?