數據庫索引

什麼是索引?

簡單來說,索引就是一個指針,指向表裏的數據。打個比喻:數據庫裏的索引與圖書中的索引非常相似。


索引的工作原理、分類及應用:

1.工作原理:

在索引創建之後,它記錄與被索引字段相關聯的位置值。當表裏添加新的數據時,索引裏也會添加新項。當數據庫執行查詢時,如果where條件裏指定的字段已經設置了索引值,數據庫會首先在索引裏搜索where子句裏指定的值。如果在索引裏找到了這個值,索引就可以返回被搜索數據在表裏的實際位置。

2.索引的分類

2.1  單字段索引

單字段索引是索引裏最簡單、最常見的索引類型。單字段索引是基於一個字段創建的。基本語法如下:

CREATE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_NAME)

如:create index index_id on persons(id)

其中index_id爲索引的名字    persons 爲表名   id爲建立索引的表字段

2.2 惟一索引

惟一索引用來改善性能和保證數據完整性。惟一索引不允許表裏具有重複值。基本語法如下:

CREATE UNIQUE INDEX NAME_IDX ON EMPLOYEE_TBL(LAST_NAME)

如:create unique index uni_id on employees(id)

其中:unique關鍵字用來表示創建的是惟一索引

uni_id表示索引的名字

employees是表名

id是表字段

惟一索引的使用場合:如居民的身份證號碼,公司員工的工號等。

2.3 組合索引

組合索引是基於一個表裏兩個或多個字段的索引。在創建組合索引時,要考慮性能問題。因爲字段在索引裏的次序對數據檢索速度有很大的影響。組合索引的創建語法如下:

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN1,COLUMN2,..)

創建在組合索引裏的字段是因爲我們認爲這兩個字段經常會出現在where條件聯合條件裏。

2.4 隱含索引

隱含索引是數據庫服務程序在創建對象時自動創建的。比如,數據庫會給主鍵約束和唯一性約束自動創建主鍵。

3.索引的使用

經常在group by 或sort by 裏引用的字段也應該考慮設置索引。

具有大量惟一值的字段,或是在where子句裏會返回很小部分記錄的字段,都可以考慮設置索引。

4.不適合用索引的場景

索引不應該用於小規模的表。

當字段用於where子句作爲過濾器會返回表裏的大部分記錄時,該字段就不適合設置索引。

經常批量更新的表可以具有索引,但批量操作的性能會由於索引而降低。對於經常會被加載或批量操作的表來說,可以在執行批量操作之前去除索引,在完成操作之後再重新創建索引。這是因爲當表裏插入數據時,索引也會被更新,從而增加額外的開銷。

不應該對包含大量NULL值的字段設置索引。

經常被操作的字段不應該設置索引,因爲對索引的維護會變更很繁重。

5.刪除索引

刪除索引的方法非常簡單,具體語法如下:

DROP INDEX INDEX_NAME;

注:Mysql使用ALTER TABLE命令來刪除索引。

刪除索引的最常見原因是嘗試改善性能。在刪除索引後,還可以重新創建索引。有時重建索引是爲了減少碎片。


小結:

索引可以用於改善查詢和事務的整體性能。數據庫索引可以迅速地從表裏引用特定的數據。

索引跟表一樣佔據實際的空間。實際上,索引可能比所在的表更大。

重建索引的時間取決於多個因素,如索引的大小、CPU利用率和計算機性能。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章