4

皆さん、私は次の質問に対する答えを理解したいと思います。

  1. クラスタ化インデックスなしで主キーを持つことはできますか?(列に主キー制約を作成すると、デフォルトでクラスター化インデックスが作成されることを認識しています。その場合、クラスター化インデックスを非アクティブ化するにはどうすればよいですか?)

  2. 複数の列を一緒に持つクラスター化インデックスを作成できますか?(単一の非クラスター化インデックスに対して異なる列を結合できる非クラスター化のように)。

4

2 に答える 2

7

(この回答は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);

参照:ALTER TABLECREATE INDEX

于 2012-08-08T16:56:28.757 に答える
2

MySQLSQL-SERVERは異なるRDBMSです。それらは異なる機能と異なる構文を持っています。

InnoDBを使用する場合、MySQL常にPKをクラスター化インデックスにします。

SQL-SERVERただし、CLUSTEREDキーワードなしでPKを作成し、代わりに別のインデックス内で使用することができます。

どちらの場合も、PrimaryKeysとIndexes(クラスター化されているかどうかに関係なく)は複数のフィールドをカバーできます。

于 2012-08-08T12:46:26.977 に答える