Mysql中七種常見索引訪問型別

2021-10-20 20:00:17 字數 3640 閱讀 5342

在少量資料的情況下,資料庫有無索引,select語句是否走索引並不影響查詢效率;

但是在現實世界中,資料是十分龐大的,這時候資料庫有索引和select語句走索引對查詢效率可能會有幾十倍,幾百倍甚至更多倍的提高!因此我們在寫select語句時一定要通過explain的type來分析索引的訪問型別,下面介紹七種種索引的訪問型別。

create

table

`employee`

(`e_id`

varchar(11

)not

null

comment

'員工號'

,`e_name`

varchar(11

)not

null

comment

'員工名'

,`d_id`

varchar(11

)not

null

comment

'所屬部門號'

,`salary`

int(11)

notnull

comment

'工資'

,primary

key(

`e_id`),

key`d_id`

(`d_id`),

key`salary`

(`salary`),

constraint

`d_id`

foreign

key(

`d_id`

)references

`department`

(`d_id`))

engine

=innodb

default

charset

=utf8;

/*data for the table `employee` */

insert

into

`employee`

(`e_id`

,`e_name`

,`d_id`

,`salary`

)values

('e0001'

,'張三'

,'d01'

,12000),

('e0002'

,'李四'

,'d03'

,20000),

('e0003'

,'王五'

,'d03'

,30000),

('e0004'

,'趙六'

,'d02'

,8000),

('e0005'

,'小明'

,'d01'

,9000),

('e0006'

,'小紅'

,'d02'

,10000

);

create

table

`department`

(`d_id`

varchar(11

)not

null

comment

'部門號'

,`d_name`

varchar(11

)not

null

comment

'部門名'

,`dm_id`

varchar(11

)default

null

comment

'部門經理'

,primary

key(

`d_id`),

unique

key`dm_id`

(`dm_id`),

constraint

`dm_id`

foreign

key(

`dm_id`

)references

`employee`

(`e_id`))

engine

=innodb

default

charset

=utf8;

/*data for the table `department` */

insert

into

`department`

(`d_id`

,`d_name`

,`dm_id`

)values

('d01'

,'人事部'

,'e0001'),

('d02'

,'後勤部'

,'e0006'),

('d03'

,'研發部'

,'e0003'

);

#本例沒有用到任何索引,因此type為all

explain

select

*from employee;

#本例查詢的只是e_id,該欄位為主鍵,有索引,因此type為index

#本例中e_id後面加salary,type也是index,因為salary也有索引

explain

select e_id from employee ;

#本例查詢中用到了索引salary並且指定了》=10000的範圍,因此type為range

explain

select e.

`e_id`

,e.`salary`

from employee e

where e.

`salary`

>=

10000

;

#使用了非唯一性索引e_did,只匹配"d01"的資料,因此type為ref

explain

select e.

`e_id`

from employee e where e.

`d_id`

='d01'

;

#本例中採用唯一性索引e_id進行掃瞄,對於每乙個e_id

#department表中最多只有一條記錄與之匹配,因此type為eq_ref

explain

select e.

`e_name`

from employee e,department d

where e.

`e_id`

=d.`dm_id`

;

#本例中使用主鍵索引e_id進行等值查詢,只能查到乙個資料,因此type為const

explain

select e.

`salary`

from employee e where e.

`e_id`

='e0001'

;

#本例中先進行子查詢,只能查出一條資料,此時外層select的type為system

explain

select

*from

(select

*from employee e where e.

`e_id`

='e0001'

)e1;

這7種訪問型別的效率為:all

MySQL復合索引中七種常見的索引失效情形

資料庫說明 使用的table emp如下 create table emp id int 11 not null auto increment,empno int not null,name varchar 20 default null,age int 3 default null,deptid ...

常見的七種排序

排序演算法大體可分為兩類 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 線性時間非比較類排序 計數排序,桶排序,和基數排序 氣泡排序 重複地走訪過要排序的元素列,依次比較兩個相鄰的元素...

常見的七種回歸技術

根據受歡迎程度,線性回歸和邏輯回歸經常是我們做 模型時,且第乙個學習的演算法。但是如果認為回歸就兩個演算法,就大錯特錯了。事實上我們有許多態別的回歸方法可以去建模。每乙個演算法都有其重要性和特殊性。什麼是回歸分析?我們為什麼要使用回歸分析?回歸有哪些型別 如何去選擇回歸模型?回歸分析是研究自變數和因...