介紹索引前先介紹三個概念:
建立索引主要是改善select執行狀況,提公升查詢效率
mysql —>explain select …
oracle —> explain plan for select …
舉例如下:
explain
select
*from tb_emp where ename=
'張三丰'
;
執行的結果如下:(主要關注三個引數:type、key、rows)
判斷檢視key處內容,判斷是否使用了索引
檢視type型別內容:
型別值判斷標準如下:
const>ref_eq>ref>range>index>all
其中all是最糟糕的一種查詢情況,const最好
檢視查詢的行數:行數越少,執**況越好
詳見下面的sql語句
-- 建立獨一無二的索引(前提是員工名字獨一無二可以建立唯一索引)
create
unique
index uk_emp_ename on tb_emp (ename)
;-- 刪除索引
drop
index uk_emp_ename on tb_emp;
-- 不排除重複的
create
index idx_emp_ename on tb_emp (ename)
;-- 字首索引(只給員工名字第乙個字建立索引)
create
index idx_emp_ename on tb_emp (ename(1)
);drop
index idx_emp_ename on tb_emp;
-- 復合索引(從左往右,最左匹配原則)
create
index idx_emp_ename_job on tb_emp (ename(1)
,job)
;
重新執行以下語句
explain
select
*from tb_emp where ename=
'張三丰'
;
執行結果變為:
從最新結果可看,新增索引後,type變成了const,查詢的行數也只有1行,執**況得到很好的改善,查詢效率得到了極大的提高。
1. 模糊查詢在某些情況下不能使用索引
這種模糊查詢可以使用索引
explain
select
*from tb_emp where ename like
'張%'
前面加%號的模糊查詢絕對使用索引,索引會失效
explain
select
*from tb_emp where ename like
'%張%'
2. 以下情況不能使用復合索引(符合索引的最左匹配以及or語句要相當注意)符合索引的建立方式:
-- 復合索引(從左往右,最左匹配原則)
create
index idx_emp_ename_job on tb_emp (ename(1)
,job)
;
以下查詢方式原則上覆合索引都會失效:
-- 下面的查詢無法使用復合索引,因為索引的匹配要遵循最左匹配原則
explain
select
*from tb_emp where job=
'程式設計師'
;-- 此處原則上也是不能使用索引的,sql內部直譯器做了優化,把張三丰的條件放在前面的
explain
select
*from tb_emp where job=
'程式設計師'
and ename=
'張三丰'
;-- 下面的查詢使用or後也無法使用符合查詢
explain
select
*from tb_emp where ename=
'張三丰'
or job=
'程式設計師'
;-- 此條語句使用不了符合索引,應為復合索引中名字在前面,所以必須要包含名字才行,否則索引失效,因為必須符合最左匹配原則,這條語句是全表查詢
explain
select
*from tb_emp where job=
'程式設計師'
;
資料庫索引詳解
紊亂的資料庫叫做堆 建立乙個物理索引,使資料基於某乙個鍵聚集在一起。堆和聚集索引是資料頁存在的兩種方式。堆 堆就好比沒有排序過的資料頁,沒有索引的自然狀態,每個表都是組織在堆中。當表需要更多的資料,他會讓堆擴充套件使之再分配,增加在堆上的頁數。這是非常有效的,這樣,資料庫可以存放資料在任何空當,而不...
資料庫索引原理詳解
一 使用索引的好處 建立索引可以大大提高系統的效能。第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序子句進行資料檢索時,同...
資料庫基礎 索引詳解
閱讀導航 提高效能 索引 b tree 索引 hash 索引 其他型別 指標 索引百利無一害 索引對於接觸過資料庫的人,都不會很陌生,但是說實話,也不一定很熟悉。先來介紹下索引的優點。提高效能 現在有乙個資料庫表 words 有 wordid wordpage wordname wordpronun...