所謂的索引Index是能夠讓資料搜尋更快的一種方法。
為什麼使用索引Index之後就可以加快檢索速度呢?以書為例子來說,假設要從一本電腦書當中找到有關「資料庫」的頁面,一般來說有兩個方法:
- 從書的最前頭開始尋找「資料庫」這個關鍵字
- 從書本最後的索引中找到與「資料庫」有關的頁面
第二個方法不用說也知道是最快的檢索方法。資料庫的索引也具有相同的作用。
索引Index也是有缺點的。當資料表中的資料量較少的時候,使用索引反而會讓檢索速度變慢。這就和我們要從只有十行長度的文字中取得某些資訊時,與其從索引來找還不如直接閱讀這些文字來得快是一樣的。
另外,當要更新資料的時候,由於不僅是資料表本身的資料要更新,且索引也必須要更新,因此會使更新的時間變的更久。
其實只要對select語法的where敘述內的欄位來製作索引index即可。使用索引之後,就能更有效率地進行資料表的結合與目標資料的過濾。
更新一個包含索引的資料表需要比更新一個沒有索引的資料表花費更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜尋的欄位(以及表格)上面建立索引。
Create Index
語法
1
2
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
範例1
The SQL statement below creates an index named “idx_lastname” on the “LastName” column in the “Persons” table:
(在 Persons 表的 LastName 創建一個名為 idx_lastname 的索引)
1
2
CREATE INDEX idx_lastname
ON Persons (LastName);
範例2
If you want to create an index on a combination of columns, you can list the column names within the parentheses, separated by commas:
(如果您希望索引不只一個列,您可以在括號中列出這些列的名稱,用逗號隔開:)
1
2
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
範例3
對販賣資料的商品ID, 負責人ID, 顧客ID製作索引。
1
2
create index idx_id
on 販賣資料(商品ID, 負責人ID, 顧客ID)
Drop Index
索引的刪除要以drop index語法進行。
語法
1
DROP INDEX table_name.index_name;
範例
刪除販賣資料的索引(idx_id)
1
drop index 販賣資料.idx_id