「達人に学ぶDB設計徹底指南書」を読んで index について調べてみた

2019.07.25

今週は先輩からおすすめされた書籍を片っ端から読破することに時間を費やしている。先日読んだ良書「オブジェクト指向でなぜつくるのか」に続けて、「達人に学ぶ DB 設計徹底指南書」も分かりやすく、かつ有益な書籍だった。

データベースのパフォーマンス改善のための index

Rails にもadd_indexという記述で index を張れることは、一応知っていた。ただ、index の有用性についてしっかりと調べていなかったが、今回の書籍で学ぶことができた。

index のメリット

index を張ることによるメリットは以下の3点。

  1. アプリケーションに影響を与えずパフォーマンス改善が可能(アプリケーション透過性)
  2. データベースそのものに影響を与えずパフォーマンス改善が可能(データベース透過性)
  3. 上記のような透過性にも関わらず、高いパフォーマンス改善が見込める

index を張る方針

「どのようなテーブルに対して index を張るべきか?」については、以下の3点に気をつける。

  1. 大規模テーブルに対して作成する
  2. カーディナリが高い列に対して作成する
  3. WHERE、結合条件などで使用される列に対して作成する

カーディナリはその列がどれくらいの種類の情報を持つか。例えば、「性別」に関する列であれば情報量は片手で数えられる程度だが、「都道府県」や「日時」などの列では多種類の情報を取り扱うことになる。 カーディナリが高い列とは、後者のような多種類の情報を取り扱う列のこと。

Rails で index を張る方法

rails で index を追加する方法は非常にシンプルで、以下のような記述を migration ファイルに追記するだけ。

add_index :table_name, :column_name

add_index :users, :name

まとめ

今回は「達人に学ぶ DB 設計徹底指南書」で学んだことについて紹介した。個人でポートフォリオを作る範囲では index のメリットを強く感じることはなさそうだが、企業で大きなサービスを開発する際には、知っておいて損はないことだと感じた。