1
/
5

-Qiita記事Part.42-新人エンジニア、主キーとインデックスの区別がついていなかった件について

こんにちは、ナイトレイインターン生の保科です。
Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。

今回はエンジニアの船津さんの記事です。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓


主キーとインデックスって違うらしい

「主キーとインデックスは全く別物でした!」という、少し考えれば当たり前のことを言うための記事です。

…でも、本気で同じだと思っていたんです。初学者の思い込みって怖い。

ということで、「なんで勘違いしちゃったのかなー?」というところまで含めて、書けたらいいなと思います。

気づいたきかけ~ITパスポートの過去問〜

きっかけは、こちらのITパスポートの過去問です。

問題:関係データベースの表に設定する主キー、外部キーおよびインデックスのうち、1つの表に対して複数設定できるものだけを全て上げたものはどれか。

…え?主キーとインデックスって同じじゃないの…?と思って、調べてみました。

主キーとインデックスの違い

調べ始めたら、すぐ先人に出会いました。混乱しちゃってたの、自分だけじゃなかったみたい!よかった!(まとめてくださりありがとうございます🙇‍♀️)

https://qiita.com/pirorirori_n712/items/b47ade3fdaf8b4a109ba

上の記事で、重要なことは書いてくださっているのですが、改めてまとめるとこういうことみたいです。

主キーとは、

  • PRIMARY KEY制約を設定して作られたカラムのなかのデータのこと
  • レコードがテーブル内で一意であることを確定させるためための役割
  • 重複とNullが許されない

インデックスとは、

  • 検索を速く容易にするために、任意のデータに貼り付けるもの
  • 検索アルゴリズムに適したインデックスを貼る必要がある

なるほど、主キーが「テーブル内でデータを一意に確定させる」ために存在しているのに対して、インデックスは「素早く検索するためにデータに貼る添字」としての役割をしているのですね。

両者は全く違うもののようですが、なぜ主キーとインデックスが同じものだと勘違いしていたのでしょうか。実は、主キーを作成すると、自動的にインデックスが貼られるそうなのです。加えて、初学者が作成するアプリケーションでは、データの検索アルゴリズムで主キーを使うことが多いので、主キーとインデックスを混同したり、はたまた主キーをインデックスと呼んでしまったりするのかもしれません。

色々なインデックス方式

主キーとインデックスの違いがわかったところで、インデックスについてもう少し深ぼってみました。

インデックスの役割は「検索を容易にするための添字」でしたが、インデックスの貼り方にもいくつかの種類があるようです、

  • Bツリーインデックス

いわゆる「木構造」でデータが整理されています。階層的になっているため、データの検索が素早く行えます。

  • ビットマップインデックス

ある値が存在するか否かを、0,1で表現する方法です。ユニークな値が少ないカラムに向いています。検索対象の値が多いカラムでは、ビットが多くなりすぎて、検索に時間がかかってしまいます。

  • ハッシュインデックス

検索対象の値をハッシュ化した値をインデックスとして用います。例えば、date型で日付を含んだ値から特定の月のデータのみを抽出したいとき、月単位でハッシュ化してインデックスとして用意しておくと、バラバラの日付から探索するよりも、容易に目的のレコードを集めることができます。

まとめ

まだまだ、雰囲気でわかった気になっている概念や言葉がたくさんありそうです。初学者的な浅く広くの学習に加えて、時には丁寧な勉強も必要そうです。

Invitation from 株式会社ナイトレイ
If this story triggered your interest, have a chat with the team?
株式会社ナイトレイ's job postings

Weekly ranking

Show other rankings
Like 保科 汐里's Story
Let 保科 汐里's company know you're interested in their content