SQL中的索引
阿新 • • 發佈:2020-07-21
概述
- 索引(index)作用:
相當於一本字典目錄,提高程式的檢索/查詢效率,表中每一個欄位都可新增索引。 - 主鍵自動新增索引:
主鍵和具有unique約束的欄位自動會新增索引。能夠通過主鍵查詢的儘量通過主鍵查詢,效率較高。 - 儲存地址
索引和表相同,都是一個物件,表是儲存在硬碟檔案中的,那麼索引也是表的一部分,索引也儲存在硬碟檔案中。 - MySQL資料庫中表的檢索方式有2種:
第一種:全表掃描(效率較低)
第二種:通過索引檢索(提高查詢效率) - 什麼情況下適合給表中欄位新增索引?
1、該欄位資料量龐大;
2、該欄位很少的DML操作;(由與索引也需要維護,DML操作多的話,也影響檢索效率)(資料一旦修改,索引需要重新排序)
3、該欄位經常出現在where條件中。 - 檢視SQL語句的執行計劃
EXPLAIN SELECT
id,
`name`
FROM
t_user
WHERE
`name` = 'lisi';
索引的應用
建立索引
- 語法結構:
a)create index 索引名 on 表名(列名)
b)create unique index 索引名 on 表名(列名)
注:新增unique表示在該表中的該列新增一個唯一性約束。 - 示例:
create index dept_dname_index on t_user(name);
再檢視解釋:
檢視索引
- 語法結構:
show index from 表名;
- 示例:
show index from dept;
刪除索引
- 語法結構:
drop index 索引名 on 表名;
- 示例:
drop index dept_dname_index on t_user;
索引的實現原理
索引底層採用的資料結構是:B + Tree
- 索引的實現原理?
通過B + Tree縮小掃描範圍,底層索引進行了排序、分割槽,索引會攜帶資料在表中的“實體地址",最終通過索引檢索到資料之後,獲取到關聯的實體地址,通過實體地址定位表中的資料。效率是最高。 - 示例:
select ename from emp where ename ='SMITH';
通過索引轉換為:
select ename from emp where 實體地址 = 0x3; - 索引的分類
單一索引:給單個欄位新增索引
複合索引:給多個欄位聯合起來新增1個索引
主鍵索引:主鍵上會自動新增索引
唯一索引:有unique約束的欄位上會自動新增索引 - 索引什麼時候失效?
模糊查詢的時候,第一個萬用字元使用的是%,這個時候索引是失效的。