在表的主键上有索引吗?

在表的主键上有索引吗?

问题描述:

是否有主键列意味着该列上有索引?如果是这样,它是什么样的索引?在表的主键上有索引吗?

+2

哪个数据库服务器? – SLaks 2010-02-01 20:21:26

+0

我使用SQL Server 2008 – Shayan 2010-02-01 20:24:02

+0

请检查这篇文章http://stackoverflow.com/questions/462477/sql-primary-key-and-index – madatanic 2010-02-01 20:22:29

对于SQL Server,我相信从以前的问题是你正在使用的,当你定义一个PRIMARY KEY时,它会自动在该列上有一个索引,默认是一个CLUSTERED索引。您可以在创建约束时定义它是否应该是NONCLUSTERED或CLUSTERED索引。

+0

OP的+1和FYI:虽然MySQL和SQL Server使用相同的术语,但索引不包含ANSI。 Oracle不区分 - 它们只是索引。同样重申:SQL Server - 在定义主键时默认创建聚集索引,但可以更改聚集索引以关联表中的其他列。 – 2010-02-01 20:36:18

这取决于数据库。

某些数据库要求或自动创建主键索引,以强制实现主键的唯一性。其他人非常乐意对桌面进行全面扫描。

您使用的是哪个数据库?

编辑:

  • 的SQLServer(版本7 - 2008年)创建的索引或主键 - 你可以控制它是否是群集。
  • 当您添加唯一键约束时,旧版本的Oracle(8i,9i)也会创建索引。根据我刚刚看过的测试案例,新版本(10g)似乎并不如此。
+0

SQL Server 2008 – Shayan 2010-02-01 20:24:20

在任何“真实”数据库中,是的,主键意味着具有唯一索引。在一些数据库中,主键索引也可以集中在键值上。

是的,主键意味着一个索引。

如果主键被聚簇,索引将成为主表文件的一部分。它不是集群的,它将成为单独索引文件的一部分。

+0

所以,如果我有一个主键(这必然有我)我不能有另一个聚集索引?因为只有一个聚集索引是可能的。我怎么能说我不希望它是非集群? – Shayan 2010-02-01 20:27:22

+1

您可以使用'nonclustered'关键字创建一个非集群主键,请参阅http://msdn.microsoft.com/en-us/library/aa258255(SQL.80).aspx – Andomar 2010-02-01 20:29:48

在我用过的所有数据库中,PRIMARY KEY基本上只是一个UNIQUE索引。

+0

我认为这基本上是正确的。所以+1来弥补无法解释的downvote :) – Andomar 2010-02-01 20:32:45

+0

大声笑,谢谢Andomar! – 2010-02-02 00:41:15