08 索引
一、什麼是索引
- 索引就相當於一本書的目錄,通過目錄快速查找對應資源。
- 在數據庫方面,查詢一張表的時候有兩種檢索方式:
- 第一種是:全表掃描
- 第二種是:根據索引檢索(效率很高)
- 索引提高檢索效率的本質:縮小了掃描範圍
- 索引雖然可以提高檢索效率,但是不能隨意添加索引,因爲索引也是數據庫當中的對象,也需要數據庫不斷的維護。是有維護成本的。比如,表中的數據經常被修改這樣就不適合添加索引,因爲數據一旦修改,索引需要重新排序,進行維護。
- 添加索引指的是給某一字段或者某些字段添加索引。
二、如何創建索引對象和刪除索引對象
-
創建索引
使用命令:create index [索引名稱] on [表名]([字段名]); /*示例*/ create index t_stu_sname on t_stu(sname);
-
刪除索引
使用命令drop index [索引名稱] on [表名]; /*示例*/ drop index t_stu_sname on t_stu;
三、什麼時候考慮給字段添加索引(滿足條件)
- 數據量龐大(根據客戶需求和線上環境判斷)
- 該字段很少的DML操作(因爲字段進行修改操作,索引也需要維護)
- 該字段經常出現在
where
語句中(經常根據某個字段查詢) - 注意:
主鍵
和具有unique
約束的字段會自動添加索引
四、查看sql語句執行計劃
使用命令:explain [sql語句];
explain select * from t_stu where sname='zs2';
執行結果:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | t_stu | ref | t_stu_sname | t_stu_sname | 195 | const | 2 | Using where |
五、索引的底層原理
- 採用的數據結構:B + Tree 結構
- 實現原理
通過B + Tree 縮小掃描範圍,底層索引進行排序,分區,索引會攜帶數據在表中的“物理地址”,最終通過索引檢索到數據後,獲得到關聯的物理地址,通過物理地址定位表中的數據,效率是最高的。select sname from t_stu where sname='zs1'; /*通過索引轉換爲:*/ select sname from t_stu where 物理地址=0x2;
六、索引的分類
- 單一索引:給單個字段添加索引
- 複合索引:給多個字段聯合起來添加一個索引
- 主鍵索引:主鍵上爲主動添加索引
- 唯一索引:有unique約束的字段上會自動添加索引
七、索引什麼時候失效
select sname from t_stu where sname like '%z%';
什麼時候失效
select sname from t_stu where sname like '%z%';
模糊查詢的時候,第一個通配符用%,這時索引會失效。