私が使用する必要がある場合にはKEY
、PRIMARY KEY
、UNIQUE KEY
とINDEX
?
私が使用する必要がある場合にはKEY
、PRIMARY KEY
、UNIQUE KEY
とINDEX
?
回答:
KEY
そして、INDEX
MySQLでの同義語です。彼らは同じことを意味します。データベースでは、インデックスを使用してデータ検索の速度を向上させます。インデックスは、通常で使用される列に作成されJOIN
、WHERE
およびORDER BY
句。
と呼ばれるテーブルがあり、users
「Smith」という姓を持つすべてのユーザーを検索するとします。インデックスがないと、データベースはテーブルのすべてのレコードを通過する必要があります。データベースにあるレコードが多いほど、結果を見つけるために必要な作業が増えるため、これは遅くなります。一方、インデックスは、データベースが「スミス」レコードが保持されている関連ページにすばやくスキップするのに役立ちます。これは、私たち人間が電話帳のディレクトリを検索して、姓で誰かを見つける方法と非常に似ています。情報を何らかの順序で挿入した限り、表紙から表紙へとディレクトリを検索することはしません。 「S」ページにすばやくスキップするために使用します。
主キーと一意キーは似ています。主キーは、行を一意に識別できる列または列の組み合わせです。ユニークキーの特殊ケースです。テーブルに含めることができる主キーは1つだけですが、一意のキーは複数持つことができます。列に一意のキーを指定すると、テーブル内の2つの異なる行が同じ値を持つことはできません。
また、主キーまたは一意キーとして定義された列は、MySQLで自動的にインデックスが作成されることに注意してください。
passengers
次のフィールドで呼び出されるテーブルがある場合:(id, first_name, last_name, age, passport_number)
通常、id
列を主キーとして設定します。主キーは自動的に一意のキーになります。主な違いは、テーブルには主キーを1つしか持てないことと、列にNULL
値を含めることができないことです。id
列を設定する必要はありません。列をUNIQUE
主キーに設定することにより、自動的に一意であることが保証されます...そして、乗客が1人だけpassport_number
にUNIQUE
なるように設定することもできます...
NULL
その列に問題なく挿入できます。
KEYとINDEXは同義語です。
パフォーマンス測定およびEXPLAINにより、インデックスが欠落しているためにクエリが非効率であることが示された場合は、インデックスを追加する必要があります。インデックスを追加すると、クエリのパフォーマンスが向上します(ただし、テーブルへの変更が遅くなる可能性があります)。
重複する値を挿入しようとするとエラーが発生するように、その列(1つまたは複数)の値を一意に制約する場合は、UNIQUEを使用する必要があります。
PRIMARY KEYは一意制約であり、列がNOT NULLであることも意味します。各行にIDを与えるために使用されます。これは、外部キー制約を介して別のテーブルと結合するのに役立ちます。テーブルがPRIMARY KEYを持つ必要はありませんが、通常は良い考えです。
主キーはNULL
値を許可しませんが、一意のキーはNULL
値を許可します。
テーブルで宣言できる主キーは1つだけです が、テーブルには複数の一意のキー(列の割り当て)を含めることができます。
PRIMARY KEY
AND UNIQUE KEY
は、機能が異なる以外は類似しています。主キーにより、テーブルの行が一意になります(つまり、まったく同じキーを持つ2つの行は存在できません)。データベーステーブルに含めることができる主キーは1つだけです。
一意のキーは、テーブル行のテーブル列を一意にします(つまり、2つのテーブル行がまったく同じ値を持つことはできません)。一意のキーテーブル列を複数持つことができます(テーブル内の一意のテーブル列が1つだけであることを意味する主キーとは異なります)。
INDEX
独自性も生み出します。MySQL(例)は、インデックスが付けられた列のインデックステーブルを作成します。このようにすると、インデックスが作成されたテーブル列でクエリがクエリされたときに、テーブルの行の値を簡単に取得できます。欠点は、更新、削除、作成を多数行うと、MySQLがインデックステーブルを管理しなければならないことです(パフォーマンスのボトルネックになる可能性があります)。
お役に立てれば。
UNIQUE KEY
することはできますNULL
がPRIMARY KEY
できませんNULL
。
一意のキー:2つの行が類似していない列
主キー:テーブルのすべての行を一意に識別できる列の最小数のコレクション(つまり、主キーを構成するすべての列で2つの行が類似していない)。テーブルには複数の主キーを含めることができます。一意キーが存在する場合、それはテーブル内の(「the」主キーではなく)主キーです。一意のキーが存在しない場合、いくつかのテーブルで主キーを構成できる(first_name、last_name、father_name、mother_name)などの行を識別するために、複数の列の値が必要になります。
インデックス:クエリを最適化するために使用されます。いくつかの列に基づいて結果を何度も検索またはソートする場合(たとえば、ほとんどの場合、学生はロール番号ではなく名前で学生を検索することになります)、列の値がすべて "インデックス付き」、たとえばバイナリツリーアルゴリズム。