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%’;
使用模糊查詢,第一個通配符使用的是%時,這個時候索引是失效的。