6-2:索引類型

叢集(Cluster)索引

資料表本身即是依此索引的順序存放,無須另外建索引表,因此每個表只能有一個叢集索引,通常是主鍵(Primary Key)。特性是查詢最快、最直接,異動卻最慢,因為每個欄位都要搬動。建立叢集(Cluster)索引範例如下:

# 將資料表product的pid欄位建為叢集索引
create clustered index product_pid
on product(pid)

唯一(Unique)索引

此欄位不允許重複值,如:學號、訂單編號等,每次用此欄位查詢只會得到一(或零)筆資料,主鍵(Primary Key)就是一種Unique索引,通常是由資料庫所屬的應用系統來決定此欄位的值,而不能由外部所提供,才能確保唯一性。建立唯一(Unique)索引範例如下:

# 將資料表customer的身分證號欄位ssid建為唯一索引
create unique index custm_ssid
on customer(ssid)
# 建立主鍵(Primary Key)的方式
# 建立student表時直接指定Sid欄為主鍵
create table student
(
 sid char(7) primary key,
 sname char(10) not null,
 tel char(10)
)
# 將Customer的Cid欄位作為主鍵
ALTER TABLE Customer
ADD CONSTRAINT PK_Customer
  PRIMARY KEY (Cid)

觀看教學影片

欄位允許重複值的索引

例如姓名、生日、電話、…等欄位有可能重複,一定會重複的欄位例如地區、年齡、成績、性別…,建立索引可以把查詢的範圍縮小,建立索引範例如下:

# 將資料表customer的cname欄位建為索引
create index custm_cname on customer(cname)

複合(Composite)索引

複合索引通常是Unique索引,由兩(多)個欄位共同組成的索引,當單一欄位無法決定資料的唯一性時,需兩(多)個欄位組合才能決定唯一性,此外,在查詢時經常同時作查詢的欄位,也適合使用複合索引。建立索引範例如下:

# 將資料表prdorder的 cid及odate 兩欄位建成複合索引
create index order_odate on prdorder (cid, odate)

需注意欄位的排列是有順序性:

  • a. (Cid, Odate):以客戶為主,查客戶各訂購日期
  • b. (Odate, Cid):以日期為主,查該日有訂購的客戶