Primary-Key

試圖了解自動增量主鍵如何比沒有主鍵和其他一些主鍵問題更好

  • January 11, 2016

我試圖更好地理解主鍵,如何在表設計和查詢中有效地使用它們。

首先,主鍵本身是否用於 WHERE 子句?例如,如果我有一個姓名表,並且所有姓氏以“A”開頭的條目的主鍵設置為“A”,所有姓氏以“B”開頭的條目都設置為“B”,等等。最好的做法是:

WHERE pk_field = 'B' AND last_name = 'Bluthe'

其次,我想了解自動增量主鍵如何比以下內容更好:

SELECT last_name FROM names WHERE last_name = 'Bluthe'

如果這條記錄的主鍵是 1247

WHERE pk_field = 1247

會好很多。在找到匹配項之前,該任務是否仍會遍歷該列中的每條記錄。

首先,我同意約翰 M 對您的問題的評論。您應該閱讀一些有關數據庫概念的內容。

您可能誤解了訪問數據和數據在數據庫中的組織方式。當您需要查找 last_name 等於“Bluthe”的名稱時,只需執行以下操作:

SELECT last_name FROM names WHERE last_name = 'Bluthe'

而已。您無需擔心主鍵。您應該擔心的是 last_name 是否被索引。

當我們談論索引時,就會出現主鍵。主鍵是對錶中的行進行定址的方式。因此,PK 應該是唯一的。您定義主鍵的方式根本行不通。索引將建立在 PK 之上。假設您有如下名稱表,假設使用整數作為 pk

names
--------------------------------------------------
pk_field  first_name        last_name
--------------------------------------------------
1         John              Doe
2         Will              Smith
3         James             Bluthe
4         Nick              Smith

然後我們在 last_name 上創建索引。創建的索引將如下所示:

--------------------------------------------------
last_name     pk_field
--------------------------------------------------
Bluthe        3
Doe           1
Smith         2
Smith         4

在搜尋 last_name 時,數據庫將利用該索引來定位實際記錄。搜尋“Bluthe”將得到 pk_field = 3,然後用於從 names 表中獲取實際記錄。

對我來說,主鍵的最佳實踐是比較便宜的(使用基於整數的數據類型),使用自動增量值進行分群。使用自動增量值,當多個事務同時插入同一個表時,我們不必擔心。聚群主鍵將根據其主鍵值排列表中的物理行。因此基於主鍵的搜尋將非常快。

高溫高壓

引用自:https://dba.stackexchange.com/questions/125829