MySQL數據庫筆記9——索引

1.什麼是索引?有什麼作用?
      索引相當於一本書的目錄,通過目錄可以快速地找到對應的資源。
      添加索引是給某一個字段,或者某些字段添加索引。

      在數據庫中,查詢一張表的時候有兩種檢索方式:
            第一種方式:全表掃描
            第二種方式:根據索引檢索(效率很高)

      索引爲什麼可以提高檢索效率呢?最根本的原理是縮小了掃描的範圍。

      然而,索引雖然可以提高檢索效率,但是不能隨意地添加索引,因爲索引也是數據庫當中的對象,也需要數據庫不斷地維護,是有維護成本的。比如:當表中的數據經常需要修改時,就不適合添加索引,因爲數據一旦修改,索引就需要重新排序,進行維護。

如:
select ename,sal from emp where ename = ‘SMITH’;
當ename字段上沒有添加索引時,以上sql語句會進行全表掃描,掃描ename字段中所有的值。
當ename字段上添加索引時,以上sql語句會根據索引掃描,快速定位。

2.怎麼創建索引對象?怎麼刪除索引對象?
創建索引對象:create index 索引名稱 on 表名(字段名);
刪除索引對象:drop index 索引名稱 on 表名;

3.什麼時候考慮給字段添加索引?(滿足什麼條件)
* 數據量龐大(根據客戶需求,根據線上環境)
* 該字段很少有DML操作(因爲字段進行修改操作,索引也需要維護)
* 該字段經常出現在where子句中(經常根據哪個字段查詢)

4.注意:主鍵和具有unique約束的字段自動會添加索引
所以,根據主鍵查詢效率較高,儘量根據主鍵檢索。

5.查看sql語句的執行計劃:
explain select ename,sal from emp where sal = 5000;
在這裏插入圖片描述
給薪資sal字段添加索引:
create index emp_sal_index on emp(sal);
explain select ename,sal from emp where sal = 5000;
在這裏插入圖片描述
刪除薪資sal字段的索引:
drop index emp_sal_index on emp;
explain select ename,sal from emp where sal = 5000;
在這裏插入圖片描述
6.索引底層採用的數據結構是:B+Tree

7.索引的實現原理
      通過B Tree縮小掃描範圍,底層索引進行了排序、分區,索引會攜帶數據在表中的“物理地址”,最終通過索引檢索到數據之後,獲取到關聯的物理地址,通過物理地址定位表中的數據,效率是最高的。
在這裏插入圖片描述
8.索引的分類
      單一索引:給單個字段添加索引
      複合索引:給多個字段聯合起來添加1個索引
      主鍵索引:主鍵上自動添加索引
      唯一索引:有unique約束的字段上會自動添加索引
……

9.索引什麼時候失效?
select ename from emp where ename like ‘%A%’;
使用模糊查詢,第一個通配符使用的是%時,這個時候索引是失效的。

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