9

是的,它是这个副本。但是我只需要对Pinal Dave的这篇文章进行澄清,其中说:

场景四:主键默认为聚集索引,其他索引默认为非聚集索引

在这种情况下,我们将在两个表上创建两个索引,但我们不会在列上指定索引的类型。当我们检查结果时,我们会注意到主键自动默认为聚集索引,另一列默认为非聚集索引。

-- 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
4

2 回答 2

15

唯一自动创建的索引:

  • 主键上的聚集索引(除非您另外指定 - 如果您将主键定义为非聚集,则将创建非聚集索引)

  • 将a应用于列(或列集)时的唯一非聚集索引UNIQUE CONSTRAINT

于 2013-05-25T06:05:36.067 回答
2

只是拼写出来 - Pinal Dave 的示例的结果是类似于以下的索引:

TestTable   PK__TestTabl__3214EC2703317E3D  CLUSTERED
TestTable   UQ__TestTabl__A259EE55060DEAE8  NONCLUSTERED

这可以解释如下:

PK 集群

如果一个表是使用主键创建的,那么它就是一个聚簇表,并且聚簇索引默认为主键,除非你另外指定。(没有聚集索引的表是

UQ 非集群

默认情况下, SQL通常不会在表上创建任何非聚集索引。

然而,正如 Marc 所指出的,因为该表有一个带有UNIQUE约束的列(Col1 INT NOT NULL UNIQUE),MS SQL将约束实现为该列上的唯一非聚集索引。

另请参阅:Sql Server 唯一键是否也是索引?

于 2013-05-25T10:44:49.527 回答