データベース入門者のための「テーブルの主キーとインデックスの違い」

WordPress個別サポート

データベースに入門すると「主キー」や「インデックス」という用語を目にするようになります。

これらのキーワードは、掘り下げると膨大な情報になってしまいますが、ここでは、データベースに入門したばかりの方で、「主キー」や「インデックス」の取り扱いに迷って困っている方のために、簡単に違いを説明します。

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

一言で言えば、

  • 主キー --- 行を識別するもの(口座番号、生徒番号、社員番号などの役割)
  • インデックス --- 検索を速くするもの(書籍の巻末にある索引の役割)

というイメージです(理解を助けるため、厳密な意味は、ここでは置いておきましょう)。

インデックスとは本で言えば巻末の索引のようなものです。そのメリットは、巻末にあいうえお順で並んでいる索引からイメージできるかもしれませんが、素早く内容を検索できる点です。「あの内容は何ページを見れば良い?」がすぐにわかるということです。

※ちなみに「索引」に対応する英単語はindexです。

余談を少し書くと、インデックスのデメリットは更新が遅くなることです。本に新たなページを追加した場合、索引にも更新をかける必要があります。索引がなければ、その手間はありません。つまり、インデックスを使うと検索が速くなる一方で更新が遅くなるという特徴があります。

※“遅くなる”というほどのことはありませんが、システムの動作速度が気になるときに改善ポイントの1つになり得るということです。

本のたとえでさらに言えば、索引(インデックス)がなくても本は成り立ちます。つまり、インデックスは必須というより、あれば便利というレベルの仕組みと言えます。

※ほとんどの本に索引が存在するとは思いますが。

データベース入門時は主キーの理解が必須

誤解を恐れずに言えば、データベースに入門したばかりの方は、あまりインデックスを強く意識する必要はないということです。もちろん、余裕があれば、どんどん理解を深めてください。

Accessを使っている方は、画面に「主キー」と「インデックス」というボタンがあるので、どちらも同じように理解が必要なのか、どのように使い分けるのかなど、迷ってしまうかもしれません。

主キーボタンとインデックスボタン
主キーボタンとインデックスボタン

あれば便利な“本の索引”であるインデックスとは違って、主キーはデータベースの入門時から意識する必要があります。

主キーは行を識別するために必須

主キーとは、行を識別する列のことを指します。Accessではオートナンバー型のIDという名前のフィールドを使うのが典型的ですが、口座番号、生徒番号、社員番号などと同じように「誰の口座?」「この社員は誰?」など1行1行を識別する役割を果たします。社員名簿には同姓同名の社員が存在する場合もあるので、「鈴木次郎」という社員名では単純に行を識別することができません。

「鈴木次郎さんの給料を2倍にする」という場合、どのデータの給料を変更するのか、社員名だけでは判断できないということです。

そのため、どの列で行を識別するかを示す主キーを設定することが非常に重要です。

テーブル作成時は必ず主キー列(複数列の場合もある)を設定します。

つまり、「勉強が進んだら主キーについて学ぼう」というゆっくりした学習項目ではなく、テーブルが作りたいと思った日からできるだけ早く理解すべき項目が主キーなのです。余裕ができてから学べば良い「インデックス」とは、この点で大きく違います。

紛らわしい話になりますが、実は多くのデータベースでは、主キーもインデックスになっていることが少なくありません。実際、見た目は主キーフィールドもインデックスのフィールドも同じようなものに感じるかもしれません。

主キーは重複不可・空っぽもダメ

そこで、違いを明確にするためにインデックスと主キーの違いをもう1つ挙げておくと、データ検索に使うインデックスは重複可能ですが、行を識別する主キーは重複不可ということです。

つまり、同姓同名が発生する社員名というフィールドは検索用のインデックスとしては問題ありませんが、行を識別する主キーとしては使えません。

また、主キーは空にすることはできません。

まとめると、主キーは、

  • 行を識別するのが目的
  • 主キー列の値は重複不可
  • 主キー列を空にすることはできない

という特徴があります。データベースに入門したばかりの方にも必須の学習項目です。インデックスのことは後に回しても、主キーの理解は早く進めましょう。

WordPressデータベース