3332644561_c9d5041d02_b

データベースでのインデックスの張り方のコツ(Rails編)


インデックスとは何か?

インデックスとは、本でいう目次のようなものです。

例えば、データベースにある名簿に「田中」という名前の人が何人いるか調べたい時、100人であればすぐ見つかるでしょうが、それが10万人、100万人と増えるごとに、検索にかかる時間が大きく増えてしまいます。

データベースは上から「田中」という名前かどうかを1つ1つ確認する全文検索をしているので、データ量が増えれば増えるほど検索に時間がかかってしまうのです。

 

そこで、以下の図のように田中という名前のIDをまとめておく目次を作っておくと、瞬時に田中さんが何人いるかがわかります。

スクリーンショット 2015-04-02 午後3.21.51

このような目次がインデックスです。

 

インデックスはその性質上、検索の前に作成している必要がありテーブルが更新されるとインデックスも更新する必要があります

インデックスの方法には種類があり、Bツリーインデックスやハッシュインデックス、Rツリーインデックス等があります。

この中で柔軟性や全体性能のバランスがいいBツリーインデックスが最も人気があり、基本的にはBツリーインデックスを指定して問題ありません。

 

メリット

インデックスを張るメリットは、検索速度が上がることです。

データが増えれば増えるほど検索が遅くなるという問題を解決(軽減)することができます。

 

デメリット

インデックスを張るデメリットは、更新処理が遅くなることと、ハードディスクの容量を消費することです。

テーブルが更新されると、インデックスも更新する必要があるので、通常よりも更新処理が遅くなります。

また、インデックスはテーブルとは別に作られるので、ハードディスクの容量を消費します。

 

Railsにおけるインデックスの張り方

Railsアプリケーションのデータベースにインデックスを追加するためにはmigrationファイルを作成し、migrateします。

作成のコマンドは、

で、

作成されたmigrationファイルは以下の様なものになります。

 

以降は、インデックスを張るコツです。

 

コツ1:検索がよく行われるカラムに張る

Where句がよく使われるカラムに張ってください。

そもそも検索されないカラムに張る必要はありません。

 

コツ2:データが多くかつカーディナリティが高い(値の種類が多い)テーブルに張る

データがそもそも少なければ、早さは殆ど変わらずにインデックスを張るデメリットがメリットを上回ってしまいます。

 

コツ3:プライマリーキーは基本的に必須

プライマリーキーは基本的によく検索されるので、基本的にはインデックスを張ります。

 

コツ4:更新が多いテーブルはインデックスを控える

インデックスを張ると更新が遅くなるので、更新が頻繁にあるテーブルではインデックスを使うべきではありません。特にユーザーが頻繁に更新を行う場合はUXに悪影響を与えてしまいます。

 

コツ5:必要な列だけに作成する

更新処理が遅くなり、ハードディスクを消費するというデメリットがあるので、特に必要ない列には貼らず、必要な列だけ作成するように意識します。

 

コツ6:3割を超える参照が多い場合は貼らない

3割を超えるデータを参照する場合は、インデックスを使用していないほうが早くなる場合があります。

本サイトが運営するWebデザインのオンラインスクールが公開中!
以下のリンクからお申込みで、特別料金の70%OFF!

未経験からプロのWebデザイナーになる! 400レッスン以上の完全マスターコース
こちらのコースは全くの未経験の方が、プロのWebデザイナーとして働けるレベルになることを目的としたコースです。
・全422レッスン & 42時間! 通学スクール80万円相当の内容
・授業×チャレンジ課題で実践的なスキルが身につく!
・過去1100名以上のスクール卒業生を輩出した、 Webサービス運営企業・デザイナー輩出企業だからこそ作れるプログラム

Webやアプリの最新デザインツール Sketch3 |100レッスンの完全マスターコース
Sketch3未経験からプロレベルを目指す、充実したコースです。
Sketch3の単なる機能説明をするような、つまらないコースではなく、アイコン制作、ボタン作成、メインビジュアル制作、Webページの制作など、実際の制作をしながら実践力を身につけます。
1000名以上の卒業生がいる実績ある日本のWebデザインスクールが提供しています。


kunishii

國重侑輝 Campus inc CEO。京都でスタートアップが生まれ、育ち、旅立つ場所を作ってます。最近の興味は、Ruby・Rails / UX / React / スタートアップファイナンス /グロースハック / AWS / グラフデータベース / 自然言語処理など。 http://campus-inc.org

Next ArticleIEなどの複数のブラウザチェックができる便利な無料ツールまとめ