web-dev-qa-db-ja.com

主キーとインデックスキーの違いは何ですか

主キーとインデックスキーの違いを教えてください。そして、いつ使用するのですか?

29
pavan

主キーは、次の特別な種類のインデックスです。

  • 一つだけ存在することができます;
  • nULL可能にすることはできません。そして
  • 一意でなければなりません。

主キーを行の最も自然な一意の識別子として使用する傾向があります(社会保障番号、従業員IDなど。ただし、常に人工的な代理キーを使用する必要があると考えられています)。

一方、インデックスは、他の列に基づいた高速検索に使用できます。たとえば、従業員データベースには従業員番号が主キーとして含まれている場合がありますが、姓または部門のインデックスが含まれている場合もあります。

これらのインデックス(姓と部署)は両方ともNULL(おそらく)を許可せず、重複を許可し(ほぼ確実に)、姓が「Corleone」であるか、 「HitMan」部門。

41
paxdiablo

キー(最小限のスーパーキー)は属性のセットであり、その値はすべてのタプル(ある時点でのテーブルのすべての行)に対して一意です。

インデックスは、データへの高速アクセスを可能にするパフォーマンス最適化機能です。

多くの場合、キーはインデックス作成に適した候補であり、一部のDBMSはキーのインデックスを自動的に作成しますが、そうする必要はありません。

「インデックスキー」というフレーズは、これら2つのまったく異なる単語を組み合わせたものであり、混乱を避けたい場合は避けるのが最善です。 「インデックスキー」は、「インデックス内の属性セット」を意味するために使用される場合があります。ただし、問題の属性のセットは必ずしも一意ではないため、必ずしもキーではありません。

17
nvogel

他の応答は、プライマリキーを定義していますが、プライマリインデックスは定義していません。

プライマリインデックスは、プライマリキーのインデックスではありません。

プライマリインデックスはテーブルのデータ構造ですが、データ構造がプライマリキーによってorderedの場合のみです。したがって、プライマリキーによってレコードを検索するために別のデータ構造を必要とせずに効率的な検索が可能です。

すべてのデータベース(私が知っている)には主キーがあります。

すべてのデータベースにプライマリインデックスがあるわけではありません。デフォルトでは、主キーに副次索引を作成しないもののほとんど。

0
Will Cross