だけでなく、すべての答えは非常に有用だったが、それでも私は、テーブルが一つだけクラスタ化インデックスと含めることができます
- だけでなく、いくつかの他の人のために参考になるように、いくつかの詳細な回答を追加したいと思います主キーは で、クラスタ化/非クラスタ化インデックスにすることができます。
- ユニークキーがクラスタ化/非クラスタ化インデックスすることができ、同様、 は以下
シナリオ1は、例のいくつかである:主キーはこの場合、クラスタ化インデックス
にデフォルト設定されますが、我々プライマリキーのみを作成し、テーブル上に作成されたインデックスの種類を確認すると、自動的にクラスタ化インデックスが作成されていることがわかります。
USE TempDB
GO
-- Create table
CREATE TABLE TestTable
(ID INT NOT NULL PRIMARY KEY,
Col1 INT NOT NULL)
GO
-- Check Indexes
SELECT OBJECT_NAME(OBJECT_ID) TableObject,
[name] IndexName,
[Type_Desc] FROM sys.indexes
WHERE OBJECT_NAME(OBJECT_ID) = 'TestTable'
GO
-- Clean up
DROP TABLE TestTable
GO
シナリオ2:主キーは、このケースでは、明示的に非クラスタ化インデックスとして主キーを定義しますし、それは非として、それを作成する非クラスタ化インデックス
として定義されますクラスタードインデックス。主キーは非クラスタ化インデックスになることが証明されています。
USE TempDB
GO
-- Create table
CREATE TABLE TestTable
(ID INT NOT NULL PRIMARY KEY NONCLUSTERED,
Col1 INT NOT NULL)
GO
-- Check Indexes
SELECT OBJECT_NAME(OBJECT_ID) TableObject,
[name] IndexName,
[Type_Desc] FROM sys.indexes
WHERE OBJECT_NAME(OBJECT_ID) = 'TestTable'
GO
-- Clean up
DROP TABLE TestTable
GO
シナリオ3:私たちは別の列にクラスタ化インデックスを作成します。この場合、クラスタ化インデックス
として定義され、他の列と非クラスタ化インデックスの主キーのデフォルト値は、SQL Serverが自動的に作成されます。他の列にクラスタード・インデックスが指定されているため、非クラスター索引としての主キー。
-- Case 3 Primary Key Defaults to Non-clustered Index
USE TempDB
GO
-- Create table
CREATE TABLE TestTable
(ID INT NOT NULL PRIMARY KEY,
Col1 INT NOT NULL UNIQUE CLUSTERED)
GO
-- Check Indexes
SELECT OBJECT_NAME(OBJECT_ID) TableObject,
[name] IndexName,
[Type_Desc] FROM sys.indexes
WHERE OBJECT_NAME(OBJECT_ID) = 'TestTable'
GO
-- Clean up
DROP TABLE TestTable
GO
シナリオ4:この場合、非クラスタ化インデックス
に他のインデックスはデフォルトでクラスタ化インデックスの主キーのデフォルト我々は両方のテーブル上の2つのインデックスを作成しますが、我々は指定しません。列のインデックスの型。結果を確認すると、主キーは自動的にClustered Indexにデフォルト設定され、別の列は非クラスタ化インデックスとして自動的に設定されます。
-- Case 4 Primary Key and Defaults
USE TempDB
GO
-- Create table
CREATE TABLE TestTable
(ID INT NOT NULL PRIMARY KEY,
Col1 INT NOT NULL UNIQUE)
GO
-- Check Indexes
SELECT OBJECT_NAME(OBJECT_ID) TableObject,
[name] IndexName,
[Type_Desc] FROM sys.indexes
WHERE OBJECT_NAME(OBJECT_ID) = 'TestTable'
GO
-- Clean up
DROP TABLE TestTable
GO
参照:明示的に `index`作成の "クラスタ化" オプションを使用してそれを定義しない限り、the above details is been refrenced from this article
' unique'キーは、クラスタ化されていません。 –
これはhttp://stackoverflow.com/questions/1251636/what-do-clustered-and-non-clustered-index-actually-meanとhttps://msdn.microsoft.com/en-CAで少し良く説明されています。 /library/ms190457.aspx。 – yelxe