Home [SQL筆記] 索引
Post
Cancel

[SQL筆記] 索引

索引

提高檢索查詢效率。
索引可以加快查詢速度,但注意它是以空間換取時間。
所以當你索引越多時,你所需要的記憶體與維護索引的 cpu 運算就需要越多。

使用場景

TODO 如果查詢速度慢,就會建索引來增加速度

聚集索引(唯一索引/單列索引)

類似字典中的拼音索引,物理儲存順序。
每個表只能有一個聚集索引,通常主鍵會是這張表的聚集索引。

非聚集索引(非唯一索引/多列索引)

類似字典中的偏旁部首索引,邏輯儲存順序。
每個表是可以有多個非聚集索引。

範列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
select * from AccountInfo where AccountCode = ''
--給AccountInfo表中的AccountCode欄位添加索引
create unique nonclustered index index_code
on AccountInfo(AccountCode)
--索引查看(sys.indexes)
select * from sys.indexes where name = 'index_code'
--刪除索引
drop index index_code on AccountInfo
--按照顯示指定索引進行查詢with
--按照index_code來查詢
select * from AccountInfo with(index =index_code) 
where AccountCode = 'C3344556677'
--with還有另一種寫法,用大括號
create unique nonclustered index index_code
on AccountInfo(AccountCode)
with
(
    ...,
    ...,
    ...,
)

索引 (Index) 可以幫助我們從表格中快速地找到需要的資料。舉例來說,假設我們要在一本園藝書中找如何種植青椒的訊息。若這本書沒有索引的話,那我們是必須要從頭開始讀,直到我們找到有關種直青椒的地方為止。若這本書有索引的話,我們就可以先去索引找出種植青椒的資訊是在哪一頁,然後直接到那一頁去閱讀。很明顯地,運用索引是一種有效且省時的方式。

從資料庫表格中尋找資料也是同樣的原理。如果一個表格沒有索引的話,資料庫系統就需要將整個表格的資料讀出 (這個過程叫做 Table Scan)。若有適當的索引存在,資料庫系統就可以先由這個索引去找出需要的資料是在表格的什麼地方,然後直接去那些地方抓資料。這樣子速度就快多了。

因此,在表格上建立索引是一件有利於系統效率的事。一個索引可以涵蓋一或多個欄位。建立索引的語法如下:

CREATE INDEX “索引名” ON “表格名” (欄位名); 現在假設我們有以下這個表格,

1
2
3
4
5
6
7
8
Customer 表格
 欄位名稱 	 資料種類 
 First_Name 	 char(50) 
 Last_Name 	 char(50) 
 Address 	 char(50) 
 City 	 char(50) 
 Country 	 char(25) 
 Birth_Date 	 datetime 

若我們要在 Last_Name 這個欄位上建一個索引,我們就打入以下的指令,

1
2
CREATE INDEX IDX_CUSTOMER_LAST_NAME
ON Customer (Last_Name);

我們要在 City 及 Country 這兩個欄位上建一個索引,我們就打入以下的指令,

1
2
CREATE INDEX IDX_CUSTOMER_LOCATION
ON Customer (City, Country);

索引的命名並沒有一個固定的方式。通常會用的方式是在名稱前加一個字首,例如 “IDX_” ,來避免與資料庫中的其他物件混淆。另外,在索引名之內包括表格名及欄位名也是一個好的方式。

請讀者注意,每個資料庫會有它本身的 CREATE INDEX 語法,而不同資料庫的語法會有不同。因此,在下指令前,請先由資料庫使用手冊中確認正確的語法。

SQL Create Index
https://www.bilibili.com/video/BV1XV411C7TP?p=24

This post is licensed under CC BY 4.0 by the author.