MySQL索引(index)

1:什麼是索引?有什麼用?

索引就相當於是一本書的目錄,通過目錄可以快速的找到對應的資源。
在數據庫方面,查詢一張表的時候有兩種檢索方式:
第一種:全表掃描(效率較低)
第二種:根據索引檢索(效率很高)

索引爲什麼可以提高檢索效率呢?
其實最根本的原因就是縮小了檢索的範圍。
索引雖然可以提高檢索效率,但是不能隨意的添加索引,因爲索引也是數據庫當中的對象,也需要數據庫不斷的維護。是有維護成本的,比如:表中的數據經常被修改,這樣就不適合添加索引,因爲數據一旦修改,索引需要重新排序,進行維護。

添加索引是給某一個字段,或者說某些字段添加索引。
select ename,sal from emp where ename = “KING ”;
當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;

±—±------------±------±-----±--------------±-----±--------±-----±-----±------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
±—±------------±------±-----±--------------±-----±--------±-----±-----±------------+
| 1 | SIMPLE | emp | ALL | NULL | NULL | NULL | NULL | 14 | Using where |
±—±------------±------±-----±--------------±-----±--------±-----±-----±------------+

給薪資添加索引:

create index emp_sal_index on emp(sal);

查看sql語句的執行計劃

explain select ename,sal from emp where sal = 5000;

±—±------------±------±-----±--------------±--------------±--------±------±-----±------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
±—±------------±------±-----±--------------±--------------±--------±------±-----±------------+
| 1 | SIMPLE | emp | ref | emp_sal_index | emp_sal_index | 9 | const | 1 | Using where |
±—±------------±------±-----±--------------±--------------±--------±------±-----±------------+

6:索引底層採用的數據結構是:B + Tree

7:索引的實現原理?

通過底層B Tree數據結構縮小掃描範圍,底層索引進行了排序,分區,索引會攜帶數據在表中的“物理地址”,最終通過索引檢索到數據之後,獲取到關聯的物理地址,通過物理地址定位表中的數據,效率是最高的。
select ename from emp where ename = “SMITE”;
通過索引轉換爲:
select ename from emp where 物理地址 = 0x3;

8:索引的分類?

單一索引:給單個字段添加索引。
複合索引:給多個字段聯合起來添加1個索引。
主鍵索引:主鍵上會自動添加索引。
唯一索引:有unique約束的字段會自動添加索引。

9:索引什麼時候會失效?

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

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