我知道表中的唯一一個聚集索引定義了行的物理排序方式,例如,在表中爲什麼主鍵應該是聚簇索引?
==================================
Contacts
==================================
ID (P.K.) | FirstName | LastName
==================================
1 | 'Donald' | 'Trump'
----------------------------------
2 | 'Crooked' | 'Hillary'
----------------------------------
3 | 'Crazy' | 'Bernie'
將意味着3條記錄以上述順序物理存儲。但我不明白爲什麼這有幫助。也許在沒有間隙的自動遞增的主鍵的情況下,就像上面的例子中,這有助於爲查詢,如
SELECT FirstName+LastName FROM Contacts WHERE ID=2
由於物理順序使查找,如果ID=2
在O(1)
時有發生(如得到一個索引數組的元素)。但是,如果表就像
==================================
Contacts
==================================
ID (P.K.) | FirstName | LastName
==================================
1 | 'Donald' | 'Trump'
----------------------------------
89 | 'Crooked' | 'Hillary'
----------------------------------
12309 | 'Crazy' | 'Bernie'
那麼物理排序不允許O(1)
查找;我們能做的最好的是O(log(n))
。
那麼,爲什麼我們希望主鍵定義行的物理順序呢?
您並不總是希望聚簇索引是主鍵。這不是必需的,只有默認情況下,幾乎總是最主要的關鍵也是聚集索引。 –
我不確定在第一個示例或一般情況下,聚簇索引查找本身是「O(1)」。聚集索引只意味着一旦在索引中找到該項目,實際項目就在那裏。在非聚集索引中,即使找到該項目,我們仍然需要在聚簇索引中進行查找以查找實際記錄(如果我的術語稍微偏離,請原諒我)。 –
不知道爲什麼這會得到downvoted或標記爲不清楚。這是一個有效的問題,我很清楚OP在問什麼。答案很長,因爲它需要很多關於索引的信息,但問題本身對我來說似乎很合理。也許它之前已經被問過,但不值得讚揚。 –