08 索引

08 索引


一、什麼是索引

  1. 索引就相當於一本書的目錄,通過目錄快速查找對應資源。
  2. 在數據庫方面,查詢一張表的時候有兩種檢索方式:
    • 第一種是:全表掃描
    • 第二種是:根據索引檢索(效率很高)
  3. 索引提高檢索效率的本質:縮小了掃描範圍
  4. 索引雖然可以提高檢索效率,但是不能隨意添加索引,因爲索引也是數據庫當中的對象,也需要數據庫不斷的維護。是有維護成本的。比如,表中的數據經常被修改這樣就不適合添加索引,因爲數據一旦修改,索引需要重新排序,進行維護。
  5. 添加索引指的是給某一字段或者某些字段添加索引。

二、如何創建索引對象和刪除索引對象

  1. 創建索引
    使用命令:

    create index [索引名稱] on [表名]([字段名]);
    
    /*示例*/
    create index t_stu_sname on t_stu(sname);
    
  2. 刪除索引
    使用命令

    drop index [索引名稱] on  [表名];
    
    /*示例*/
    drop index t_stu_sname on t_stu;
    

三、什麼時候考慮給字段添加索引(滿足條件)

  1. 數據量龐大(根據客戶需求和線上環境判斷)
  2. 該字段很少的DML操作(因爲字段進行修改操作,索引也需要維護)
  3. 該字段經常出現在where語句中(經常根據某個字段查詢)
  4. 注意:主鍵和具有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

五、索引的底層原理

  1. 採用的數據結構:B + Tree 結構
  2. 實現原理
    通過B + Tree 縮小掃描範圍,底層索引進行排序,分區,索引會攜帶數據在表中的“物理地址”,最終通過索引檢索到數據後,獲得到關聯的物理地址,通過物理地址定位表中的數據,效率是最高的。
    select sname from t_stu where sname='zs1';
    /*通過索引轉換爲:*/
    select sname from t_stu where 物理地址=0x2;
    
    1

六、索引的分類

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

七、索引什麼時候失效

select sname from t_stu where sname like '%z%';

什麼時候失效

select sname from t_stu where sname like '%z%';

模糊查詢的時候,第一個通配符用%,這時索引會失效。

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