web-dev-qa-db-ja.com

MySQLにおけるキー、主キー、ユニークキー、インデックスの違い

KEYPRIMARY KEYUNIQUE KEYおよびINDEXをいつ使用すべきですか。

231
HELP

KEYINDEXはMySQLの同義語です。彼らは同じことを意味します。データベースでは、データ検索の速度を上げるために indexes を使用します。通常、インデックスはJOINWHERE、およびORDER BY句で使用される列に作成されます。

usersという名前のテーブルがあり、姓が「Smith」であるすべてのユーザーを検索したいとします。インデックスがないと、データベースはテーブルのすべてのレコードを処理する必要があります。データベースにあるレコードが多いほど、結果を見つけるために必要な作業が多くなるため、時間がかかります。一方、インデックスはデータベースが 'Smith'レコードが保持されている関連ページに素早くスキップするのに役立ちます。これは、私たち人間が電話帳のディレクトリを検索して姓で誰かを探すのと非常によく似ています。 「S」ページに素早くスキップするために使用します。

主キーと固有キーは似ています。主キーは、行を一意に識別できる列、または列の組み合わせです。これは 固有キー の特殊なケースです。テーブルには最大で1つの主キーを含めることができますが、複数の一意のキーを持つことができます。列に一意のキーを指定した場合、テーブル内の2つの異なる行に同じ値を設定することはできません。

また、主キーまたは一意のキーとして定義された列はMySQLでは自動的にインデックス付けされます。

281
Daniel Vassallo

KEYとINDEXは同義語です。

パフォーマンス測定値とEXPLAINが、インデックスがないためにクエリが非効率的であることを示している場合は、インデックスを追加する必要があります。インデックスを追加すると、クエリのパフォーマンスが向上します(ただし、テーブルへの変更が遅くなる可能性があります)。

重複した値を挿入しようとするとエラーになるように、その列の値を一意にする必要がある場合は、UNIQUEを使用してください。

PRIMARY KEYは両方とも一意の制約であり、列がNOT NULLであることも意味します。各行を識別するために使用されます。これは外部キー制約を介して他のテーブルと結合するのに役立ちます。テーブルにPRIMARY KEYを持つことは必須ではありませんが、通常は良い考えです。

52
Mark Byers

主キーではNULL値を使用できませんが、一意キーではNULL値を使用できます。

テーブルに1つだけ主キーを宣言することができますが、テーブルに持つことができる複数ユニークキー(列割り当て).

41
Er.Gaurav singh

PRIMARY KEYUNIQUE KEYは、機能が異なる点を除いて似ています。主キーはテーブルの行を一意にします(つまり、まったく同じキーを持つ2行はあり得ません)。データベーステーブルには1つの主キーしか持てません。

一意キーは、テーブル行のテーブル列を一意にします(つまり、2つのテーブル行がまったく同じ値を持つことはできません)。 1つ以上の一意のキーテーブル列を持つことができます(テーブル内の1つのテーブル列のみが一意であることを意味する主キーとは異なります)。

INDEXも一意性を生み出します。 MySQL(例)は、インデックス付けされているカラム用のインデックステーブルを作成します。このようにして、クエリがそのインデックス付きテーブル列に対してクエリされたときにテーブル行の値を取得することがより簡単になります。不利な点は、あなたが多くの更新、削除、作成をする場合、MySQLはインデックステーブルを管理しなければならないということです(そしてそれはパフォーマンスボトルネックになる可能性があります)。

お役に立てれば。

16
Buhake Sindi

固有キー:2つの行が類似していない列

主キー:テーブル内のすべての行を一意に識別できる最小数の列のコレクションです(つまり、主キーを構成するすべての列で2つの行が類似していることはありません)。テーブルには複数の主キーが存在できます。一意キーが存在する場合、それはテーブル内の主キーです( "主"キーではありません)。一意のキーが存在しない場合は、(first_name、last_name、father_name、mother_name)のように行を識別するために複数の列値が必要になります。一部のテーブルでは主キーを構成できます。

インデックス:クエリを最適化するために使用されます。いくつかの列に基づいて結果を何度も検索またはソートしようとしている場合(たとえば、ほとんどの人がロール番号ではなく名前で生徒を検索する場合)、列の値がすべて一致すれば最適化できます。たとえば、バイナリツリーアルゴリズムを使用してインデックスを作成します。

10
Ashwini Dhekane

主キー - テーブルには主キーを1つだけ入れることができ、テーブルに値を入力するときにその列を空白のままにすることはできません。

nique Key - テーブルには複数のユニークキーを置くことができ、テーブルに値を入力するときにそのカラムを空白のままにすることができます。主キーと一意キーを適用したとき、列は一意の値を取ります(同じではありません)。

7
VIKASH

主キーは、さまざまなテーブルを操作するために使用されます。これがリレーショナルデータベースの基盤です。書籍データベースがある場合は、2つのテーブルを作成することをお勧めします。1)booksと2)INT主キー "id"を持つ著者です。それから著者名の代わりに本の中でidを使います。

繰り返し入力したくない場合は、一意のキーを使用します。たとえば、書籍の表にタイトルがあり、タイトルごとに1つのエントリしかないことを確認したいとします。

5
irudyak

一意のキー:

  1. 複数の値をnullにすることができます。
  2. 2つのタプルが一意キーに同じ値を持つことはできません。
  3. 1つ以上の一意のキーを組み合わせて主キーを形成できますが、その逆はできません。

主キー

  1. 複数の一意のキーを含めることができます。
  2. タプルを一意に表します。
2
Pritam Banerjee