2010-07-20 102 views
0

我創建一個列作爲主鍵,這是否會自動創建索引?或者我需要明確創建索引。我假設主鍵也保持索引主鍵和索引概念

+0

取決於數據庫的實現 - 你對哪個數據庫感興趣? – 2010-07-20 16:06:03

回答

2

在SQL Server中創建一個主鍵將在該列上創建一個唯一的聚集索引。 或者更具體地從here

注PRIMARY KEY約束創建 聚集索引,如果沒有自動聚集 指數已經存在於 表,並在創建PRIMARY KEY 約束非聚集索引是沒有指定 。

+0

所以不需要明確的創建索引禮儀? – Hacker 2010-07-20 15:25:26

+0

如果您尚未在表格中指定聚簇索引,並且您沒有告訴它使用diff非聚簇索引,則會自動爲您創建索引和約束。 (作爲FYI,聚集索引對數據的順序進行物理排序,因此每個表只能有一個聚簇索引) – etoisarobot 2010-07-20 15:50:47

+1

另一個提到索引(複數)的註釋。創建主鍵會創建一個單一的聚集索引,它不會奇蹟般地計算需要索引的位置併爲您創建索引。您可能會發現需要添加一些非聚集索引來提高性能。 – etoisarobot 2010-07-20 15:55:26

0

這應該清除一些空氣。

--creating a table without any primary key 
CREATE table understanding_indexes 
(P_Id int, 
LastName varchar(255), 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255) 
) 
-- 
--checking for indexes 
sp_helpindex understanding_indexes 

輸出

The object 'understanding_indexes' does not have any indexes, or you do not have permissions. 

--ADDING A NOT NULL CONSTRAINT 
ALTER TABLE UNDERSTANDING_INDEXES 
ALTER COLUMN P_Id INTEGER 
NOT NULL 

--ADDING A PRIMARY KEY Constraint, can only be done on column which are not null. 
ALTER TABLE UNDERSTANDING_INDEXES 
ADD PRIMARY KEY (P_Id) 

sp_helpindex understanding_indexes 

輸出

PK__understa__A3420A5702084FDA clustered, unique, primary key located on PRIMARY P_Id 

總之,只要你在一個表中添加主鍵約束,它會自動將放在桌子上的聚集索引。

此插圖位於SQL Server 2008 R2上。