キーは単なる通常のインデックスです。単純化する方法は、図書館のカード目録のように考えることです。 MySQLを正しい方向に向けます。
検索速度を向上させるために一意キーも使用されますが、重複するアイテムがないという制約があります(xがyではなくx ==yである2つのxとyはありません)。
マニュアルでは次のように説明しています:
UNIQUEインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。この制約は、BDBストレージエンジンを除いてNULL値には適用されません。他のエンジンの場合、aUNIQUEインデックスは、NULLを含むことができる列に対して複数のNULL値を許可します。 UNIQUEインデックスの列にプレフィックス値を指定する場合、列の値はプレフィックス内で一意である必要があります。
主キーは「特別な」一意のキーです。何かを識別するために使用されることを除いて、基本的には一意のキーです。
マニュアルでは、インデックスの一般的な使用方法について説明しています:こちら。
MSSQLでは、概念は似ています。インデックス、一意の制約、主キーがあります。
テストされていませんが、MSSQLに相当するものは次のとおりです。
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
編集:上記のコードは正しいかどうかテストされています。ただし、それを行うにははるかに優れた構文があると思います。 SQL Serverを使用してからしばらく経ちましたが、どうやらかなり忘れてしまいました:)