1、索引的概述
索引相當于一本書的目錄,通過目錄可以快速找到對應的資源,
作用:提高檢索效率,縮小掃面范圍,
注意:索引雖然提高效率但是依舊不能隨意添加,因為索引也是資料庫中的物件,也是需要資料庫不斷的維護的,有維護成本,表中資料經常修改就不適合,因為一旦修改索引需要重新排序,進行維護,
2、怎么創建索引物件
語法格式:create index 索引名稱 on 表名 (欄位名),
eg:create index emp_sal_index on emp(sal);
3、怎么洗掉索引物件
語法格式:drop index 索引名稱 on 表名;
4、什么時候給欄位添加索引
- 資料量龐大,(根據客戶需求,根據線上的環境,)
- 該欄位很少的DML操作,
- 該欄位經常出現在where子句中,
5、sql陳述句的執行計劃
主鍵和具有unique約束的欄位自動添加索引,根據主鍵查詢效率較高,盡量根據主鍵檢索,
==explain+sql陳述句可以解釋該陳述句,(執行計劃)==可以通過此命令判斷sql是否走了索引!
6、索引底層采用的資料結構是:b+tree
索引的實作原理

案例分析

7、索引分類
- 單一索引:給單個欄位添加索引
- 復合索引:給多個欄位聯合起來添加一個索引
- 主鍵索引:主鍵上會自動添加索引
- 唯一索引:有unique約束的欄位上會自動添加索引
8、索引什么時候失效 ?
1、模糊查詢,這個時候索引失效,因為以%開始,無法使用索引!
select ename from emp where ename ='%a%' ;
2、使用or的時候會索引失效,因為如果or兩端的欄位存在一個欄位不具備索引,具備索引的欄位也會失效!
select ename from emp where ename ='zhangsan' or job = 'Java' ;
3、使用復合索引,沒有使用左側的列去查找,索引失效
creat index emp_job_sal_index on emp(job,sal) # 為job和sal兩個欄位添加復合索引 select * from emp where job = 'java' ; #會走索引,因為使用job列去查了 select * from emp where sal = 1800 ; #不會走索引,因為沒有使用左側的job列!
4、where當中的索引列參加了運算,索引失效,
select * from emp where sal + 1 = 1800 ;
5、在where當中索引列使用了函式
select * from emp where lower(ename) = 'smith' ;
本文來自博客園,作者:腹白,轉載請注明原文鏈接:https://www.cnblogs.com/wyh518/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521905.html
標籤:其他
上一篇:安裝openruler詳細步驟
