Primary-Key
試圖了解自動增量主鍵如何比沒有主鍵和其他一些主鍵問題更好
我試圖更好地理解主鍵,如何在表設計和查詢中有效地使用它們。
首先,主鍵本身是否用於 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 表中獲取實際記錄。
對我來說,主鍵的最佳實踐是比較便宜的(使用基於整數的數據類型),使用自動增量值進行分群。使用自動增量值,當多個事務同時插入同一個表時,我們不必擔心。聚群主鍵將根據其主鍵值排列表中的物理行。因此基於主鍵的搜尋將非常快。
高溫高壓