elasticsearch入門(mén)系列">elasticsearch入門(mén)系列
837
2022-05-28
繼我的上篇博客:Oracle索引知識(shí)學(xué)習(xí)筆記,再記錄一篇MySQL的索引知識(shí)學(xué)習(xí)筆記,本博客是我在學(xué)習(xí)尚硅谷的學(xué)習(xí)教程后,做的筆記,當(dāng)然我不是為了所謂宣傳,僅僅是學(xué)習(xí)記錄的筆記。本來(lái)可以不分享出來(lái),不過(guò),分享出來(lái)的筆記不僅可以給網(wǎng)上的學(xué)習(xí)者參考學(xué)習(xí),同時(shí)寫(xiě)在csdn比較方便,可以支持圖片上傳,也方便自己以后查找復(fù)習(xí)
文章目錄
一、索引的概念
二、索引分類
三、索引用法
四 、索引架構(gòu)簡(jiǎn)介
五、索引適用的情況
六、索引不適用的情況
一、索引的概念
MySQL官方給出的索引定義:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。所以說(shuō)索引就是排好序的快速查找數(shù)據(jù)結(jié)構(gòu)
二、索引分類
MySQL的索引可以分為幾種:
單值索引:?jiǎn)沃邓饕褪侵话粋€(gè)列的索引
唯一索引:唯一索引要求索引列的必須是唯一的,比如說(shuō)主鍵或者unique索引,但是還是允許空值
復(fù)合索引:復(fù)合索引就是包含多個(gè)列組成的索引
三、索引用法
創(chuàng)建索引
create [unique] index indexName on tableName(columnName(length));
1
比如給dept表創(chuàng)建索引idx_dept_id
create index idx_dept_id on dept(id);
1
修改索引
ps:修改索引也可以用于新增索引
語(yǔ)法:
alter tablename add [unique] index indexname on columnName(length);
1
刪除索引
drop index indexname on tablename;
1
查看索引
show index from tablename ;
1
如果要顯示換行可以加上\G,不過(guò)就不能加上分號(hào)
show index from tablename \G
1
附錄:
來(lái)自尚硅谷老師總結(jié)的新增索引的方法:
# 添加一個(gè)主鍵,主鍵是唯一的,不能為Null alter table tablename add PRIMARY KEY(columnName); #創(chuàng)建唯一索引,要求索引唯一,不過(guò)允允許空值 alter table tablename add unique index indexname on(columnName); # 創(chuàng)建普通的索引,索引數(shù)據(jù)可以不唯一 alter table tablename add index indexname on(columnName); # 指定索引為FullText,用于全文索引 alter table tablename add FULLTEXT indexname on(columnName);
1
2
3
4
5
6
7
8
四 、索引架構(gòu)簡(jiǎn)介
MySQL的索引結(jié)構(gòu)可以分為:
BTree索引
Hash索引
full-text全文索引
R-Tree索引
引用尚硅谷MySQL教程的圖,本博客只介紹BTree索引的
從圖可以看出BTree索引的結(jié)構(gòu)其實(shí)就是一棵B+樹(shù),并不一定是二叉樹(shù),也有可能是一棵多叉樹(shù),MySQL也是分為段區(qū)塊這種結(jié)構(gòu)的,如圖,淺藍(lán)色部分就是一個(gè)磁盤(pán)塊,藍(lán)色部分表示數(shù)據(jù)項(xiàng),而黃色部分表示指針
假如我要查找29這個(gè)值,就是遍歷下來(lái),分別查找磁盤(pán)塊1、磁盤(pán)塊3、磁盤(pán)塊8,根據(jù)指針查找下來(lái),速度非常塊,假如有幾百萬(wàn)數(shù)據(jù)的話,能走索引的情況,是非常快的,性能對(duì)比可想而知
注意:只有葉子節(jié)點(diǎn)(最下面的節(jié)點(diǎn))是存儲(chǔ)要查找的數(shù)據(jù)的,非葉子節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)只是用于指針?biāo)饕臄?shù)據(jù)項(xiàng)而已
五、索引適用的情況
1、頻繁用于查詢的條件適合建立索引
2、主鍵默認(rèn)要加上Primary索引
3、和其它表有外鍵關(guān)系的列建立索引
4、where條件后面的條件列可以建上索引
5、用于排序order by的列可以加上索引
6、用于分組group by的列可以加上索引
注意:需要經(jīng)常修改的列不適合建立索引,因?yàn)楦聰?shù)據(jù)的同時(shí)也會(huì)重新構(gòu)建索引,比較耗性能;在高并發(fā)的情況,更傾向于建立組合索引,因?yàn)橐话銇?lái)說(shuō),查詢很少有一個(gè)條件,一般是多個(gè)條件,復(fù)合索引比較適合
六、索引不適用的情況
1、需要經(jīng)常增刪改的表
2、表的記錄很少的情況,加了索引效果不明顯
3、如果某個(gè)數(shù)據(jù)列包含很多重復(fù)的數(shù)據(jù),比如用戶信息表的性別這個(gè)列,一般只有兩種情況,所以加了索引,是沒(méi)有太大的實(shí)際效果的
注意:索引應(yīng)該加在經(jīng)常查詢或者排序的列,數(shù)據(jù)重復(fù)而且分布很平均的情況,是不適合加索引的
引用尚硅谷老師的歸納:
MySQL SQL
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。