資料庫索引詳解

2021-10-10 10:30:46 字數 2647 閱讀 8618

介紹索引前先介紹三個概念:

建立索引主要是改善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...