2010-02-01 97 views
1

是否有主鍵列意味着該列上有索引?如果是這樣,它是什麼樣的索引?在表的主鍵上有索引嗎?

+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

回答

7

對於SQL Server,我相信從以前的問題是你正在使用的,當你定義一個PRIMARY KEY時,它會自動在該列上有一個索引,默認是一個CLUSTERED索引。您可以在創建約束時定義它是否應該是NONCLUSTERED或CLUSTERED索引。

+0

OP的+1和FYI:雖然MySQL和SQL Server使用相同的術語,但索引不包含ANSI。 Oracle不區分 - 它們只是索引。同樣重申:SQL Server - 在定義主鍵時默認創建聚集索引,但可以更改聚集索引以關聯表中的其他列。 – 2010-02-01 20:36:18

2

這取決於數據庫。

某些數據庫要求或自動創建主鍵索引,以強制實現主鍵的唯一性。其他人非常樂意對桌面進行全面掃描。

您使用的是哪個數據庫?

編輯:

  • 的SQLServer(版本7 - 2008年)創建的索引或主鍵 - 你可以控制它是否是羣集。
  • 當您添加唯一鍵約束時,舊版本的Oracle(8i,9i)也會創建索引。根據我剛剛看過的測試案例,新版本(10g)似乎並不如此。
+0

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

1

在任何「真實」數據庫中,是的,主鍵意味着具有唯一索引。在一些數據庫中,主鍵索引也可以集中在鍵值上。

4

是的,主鍵意味着一個索引。

如果主鍵被聚簇,索引將成爲主表文件的一部分。它不是集羣的,它將成爲單獨索引文件的一部分。

+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

1

在我用過的所有數據庫中,PRIMARY KEY基本上只是一個UNIQUE索引。

+0

我認爲這基本上是正確的。所以+1來彌補無法解釋的downvote :) – Andomar 2010-02-01 20:32:45

+0

大聲笑,謝謝Andomar! – 2010-02-02 00:41:15

相關問題