在少量資料的情況下,資料庫有無索引,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 ...
常見的七種排序
排序演算法大體可分為兩類 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 線性時間非比較類排序 計數排序,桶排序,和基數排序 氣泡排序 重複地走訪過要排序的元素列,依次比較兩個相鄰的元素...
常見的七種回歸技術
根據受歡迎程度,線性回歸和邏輯回歸經常是我們做 模型時,且第乙個學習的演算法。但是如果認為回歸就兩個演算法,就大錯特錯了。事實上我們有許多態別的回歸方法可以去建模。每乙個演算法都有其重要性和特殊性。什麼是回歸分析?我們為什麼要使用回歸分析?回歸有哪些型別 如何去選擇回歸模型?回歸分析是研究自變數和因...