前言
無論什麼時候,隻要提到資料庫,都會說到索引,它是幹什麼的,一般怎麼來用,咱們一起來看一下。
正文
1、為什麼要建立索引?
- 提高查詢速度
- 利用索引的唯一性來控制記錄的唯一性
2、什麼是索引?
索引是對資料表中一個或多個字段的值進行排序的結構。資料庫索引就好比是一本書的目錄,根據目錄可以快速定位查找區域,進而快速找到搜尋項。
3、索引的種類
根據索引對資料表中記錄順序的影響,索引可以分為聚集索引(clustered index)和非聚集索引(nonclustered index)。
-
聚集索引(也叫聚簇索引)
表資料按照索引的順序來存儲的,當在表中插入一行資料時,這行資料的存放的順序(實體順序)和建立索引的鍵值的邏輯順序相同。
一個表隻能包含一個聚集索引。
-
非聚集索引(也叫非聚簇索引)
表資料存儲順序與索引順序無關,當在表中插入一行資料時,這行資料存放的順序(實體順序)在表的最後,不會影響資料表中原有的存儲順序。
一個表中可以建立多個非聚集索引,一個表最多可以建立249個非聚集索引。
根據其索引鍵值是否可重複,索引可分為唯一索引和普通索引。
-
唯一索引
要求建立索引的關鍵字段值在表中不能有重複值。
-
普通索引
普通索引允許被索引的資料列包含重複的值。
根據其索引字段的組成情況,索引可分為單個索引和複合索引。
- 基于多個字段的組合建立索引為複合索引,複合索引同時也可以是唯一索引。
- 基于單個字段建立索引為單個索引。
索引的基本操作
- 建立索引
- 修改索引
alter table table_name add index[索引的名字] (列的清單)
--先删除
ALTER TABLE user
DROP INDEX idx_user_username;
--再以修改後的内容建立同名索引
CREATE INDEX idx_user_username ON user (username());
- 建立表的時候指定索引
create table table_name ( [...], INDEX [索引的名字] (列的清單) )
- 删除索引
--删除指定表中指定名稱的索引
ALTER TABLE table_name
DROP INDEX index_name;
- 檢視索引
--如果檢視索引前,沒有使用user db_name等指令指定具體的資料庫,則必須加上FROM db_name
SHOW INDEX FROM table_name [FROM db_name]
--如果檢視索引前,沒有使用user db_name等指令指定具體的資料庫,則必須加上db_name.字首
SHOW INDEX FROM [db_name.]table_name