также все ответы, было очень полезно, но все же я хотел бы добавить некоторые подробный ответ, так что я бы полезно для некоторых других, а также
- таблица может содержать только один кластерный индекс и первичный ключ может быть кластеризованным/некластеризованным индексом.
- уникальный ключ может быть кластерный/не кластерный индекс, а также, ниже приведены некоторые из примеров
Сценарий 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: первичный ключ по умолчанию индекс кластерным с другими индекса по умолчанию в некластеризованный индекс
В этом случае мы будем создавать два индекса на обеих таблицах, но мы не будем указать тип индекса в столбцах. Когда мы проверим результаты, мы заметим, что Первичный ключ автоматически деактивирован Кластеризованным индексом и другим столбцом как некластеризованный индекс.
-- 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
ссылка: the above details is been refrenced from this article
Символ 'unique' ключ не является кластерным, если вы явно не определить его с помощью "кластерной" опции' создать index'. –
Это объясняется немного лучше в http://stackoverflow.com/questions/1251636/what-do-clustered-and-non-clustered-index-actually-mean и https://msdn.microsoft.com/en-CA /library/ms190457.aspx. – yelxe