2013-01-08 68 views
2

可能重複:
Performance difference between Primary Key and Unique Clustered Index in SQL Server主鍵和聚集索引有什麼區別?

我要確保我搜索這個論壇,但沒有人問過這個問題,並在任何地方嫌我找不到任何答案。

我的問題是=「主鍵和聚集索引之間有什麼區別?」

+2

除了[here](http://stackoverflow.com/questions/6303995/what-is-a-difference-between-clustered-index-and-unique-index)或[here](http:// stackoverflow.com/questions/11546688/performance-difference-between-primary-key-and-unique-clustered-index-in-sql-ser):) – SWeko

+0

我確實已經閱讀過這些鏈接,但它們正在比較主鍵和唯一鍵。 –

+0

這取決於正在使用的DBMS。你在說哪一個?並非所有的DBMS都有「聚簇索引」,有些則有不同的名稱。 –

回答

9

那麼,首先,一個是,另一個是索引

在大多數數據庫術語中,密鑰是以某種方式標識數據的東西,與數據的存儲或性能沒有明確關係。而主鍵是唯一標識該數據的一段數據。

另一方面,索引是描述訪問數據的(更快)方式的東西。它(通常)並不關心數據的完整性和含義,它只關心性能和存儲。具體來說,在SQL Server中,聚集索引是一個索引,指示行的存儲順序。它所做的事情非常複雜,但有用的近似值是行按聚簇索引的值排序。這意味着,當您不指定訂單子句時,數據可能會按聚集索引的值進行排序。

所以,他們是完全不同的東西,那種有點相互恭維。這就是爲什麼SQL Server在通過設計器創建主鍵時會隨同它一起引入一個免費的聚集索引。

+2

「這意味着,當你沒有指定訂單條款時,數據很可能會按照聚集索引的值進行排序」 - 儘管依靠這一點就好像它是真的是真的愚蠢。 –

+1

@Damien爲了傳達確切的意思,我已經添加了相當多的警告詞(近似,可能,複雜),而沒有詳細說明。但是,「白癡」是一個很好的詞,總結它:) – SWeko

+0

一個更外交的術語可能是不明智的...... –

2

在你可以詢問主鍵和聚集索引之間的區別之前,你必須知道鍵和索引不是同一個東西。

密鑰可以是主鍵或外鍵。每個表只能有一個主鍵(但可能多於一列)。關鍵是合乎邏輯的事情,它服務於業務邏輯並定義數據的完整性。外鍵是對另一個表的主鍵的引用。

索引有助於加快查詢速度,因爲它會建立對所選列的引用。因此它會創建單獨的文件來幫助您使用索引列的查詢。

聚簇索引是一種特殊的索引,它定義了表的物理順序(它應該是一個順序數據)。

我想用我自己的話來解釋這一點,但你會發現你需要一個谷歌搜索的所有資源(我絕對建議你讀了很多的這個!)

0

在大部分RDBMS的,據我所知,當你創建PK時,後面的引擎會創建聚集索引。當聚簇索引設置數據順序並用於性能時,PK用於Entity integrity

2

主鍵是記錄的唯一標識符。它是負責此字段的唯一值。它只是現有的或專門創建的字段或唯一標識行的字段組。

而且聚集索引是數據結構通過有序記錄的訪問提高了數據檢索操作的速度。索引是表的一部分的副本。它需要額外的物理空間在硬盤上。