皆さん、私は次の質問に対する答えを理解したいと思います。
クラスタ化インデックスなしで主キーを持つことはできますか?(列に主キー制約を作成すると、デフォルトでクラスター化インデックスが作成されることを認識しています。その場合、クラスター化インデックスを非アクティブ化するにはどうすればよいですか?)
複数の列を一緒に持つクラスター化インデックスを作成できますか?(単一の非クラスター化インデックスに対して異なる列を結合できる非クラスター化のように)。
皆さん、私は次の質問に対する答えを理解したいと思います。
クラスタ化インデックスなしで主キーを持つことはできますか?(列に主キー制約を作成すると、デフォルトでクラスター化インデックスが作成されることを認識しています。その場合、クラスター化インデックスを非アクティブ化するにはどうすればよいですか?)
複数の列を一緒に持つクラスター化インデックスを作成できますか?(単一の非クラスター化インデックスに対して異なる列を結合できる非クラスター化のように)。
(この回答はSQL Server 2005以降のみを対象としています。MySQLについては何も知りません。)
クラスタ化インデックスなしで主キーを持つことはできますか?
はい。おっしゃるように、主キー制約はデフォルトでクラスター化インデックスによって支えられています。次のように制約を宣言することにより、非クラスター化インデックスで制約をバックアップするようにSQLServerに指示できます。
ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable
PRIMARY KEY NONCLUSTERED(Col1);
複数の列を一緒に持つクラスター化インデックスを作成できますか?(単一の非クラスター化インデックスに対して異なる列を結合できる非クラスター化のように)。
はい、インデックスキーに複数の列を含むインデックスを定義できます。これは、実際には非クラスター化インデックスと何ら変わりはありません。
CREATE UNIQUE CLUSTERED INDEX IX_MyTable_Clus
ON MyTable(Col1, Col2, Col3);
MySQL
とSQL-SERVER
は異なるRDBMSです。それらは異なる機能と異なる構文を持っています。
InnoDBを使用する場合、MySQL
常にPKをクラスター化インデックスにします。
SQL-SERVER
ただし、CLUSTERED
キーワードなしでPKを作成し、代わりに別のインデックス内で使用することができます。
どちらの場合も、PrimaryKeysとIndexes(クラスター化されているかどうかに関係なく)は複数のフィールドをカバーできます。