国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

深入聊聊Mysql索引建立的場景(IT楓斗者)

2023-04-11 16:47 作者:IT楓斗者-跳蚤網(wǎng)  | 我要投稿

引言:什么是索引?有何用?

  • 索引是一種用于快速查詢和檢索數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。常見的索引結(jié)構(gòu)有: B 樹, B+樹和Hash。

  • 索引的作用就相當(dāng)于目錄的作用。打個比方: 我們在查字典的時候,如果沒有目錄,那 我們就只能一頁一頁地去找我們需要查的那個字,速度很慢。如果有目錄了,我們只需要先去目錄里查找字的位置,然后直接翻到那一頁就行了。

哪些情況下適合建立索引?

  • where后面的過濾字段上建立索引(select/update/delete后面的where都是適用的),使用索引加快過濾效率,不用進(jìn)行全表掃描;

  • 在具有唯一要求的字段上添加唯一索引,加快查詢效率,查到即可直接返回;

  • group by或者order by后面的字段添加索引,由于索引是排好序的,所以建立索引就等同于在查詢之前已經(jīng)是排好序了

  • 在DISTINCT(去重字段)后面的字段添加索引,由于建立了索引,那么相同的數(shù)據(jù)就是挨在一起的,所以就可以進(jìn)行快速的去重操作,否則可能就需要將相同的數(shù)據(jù)找出來再進(jìn)行去重操作

  • 多表連接join的時候在連接的字段上建立索引(小表驅(qū)動大表)

  • 取字符串一定前綴建立索引(不是用整個字符串作為索引,否則將會占用太大的空間)

  • 頻繁使用的列上建立索引(可以建立聯(lián)合索引,同時最頻繁使用的字段應(yīng)該在聯(lián)合索引的最左側(cè),最左側(cè)原則)

  • 區(qū)分度高的列上建立索引(主鍵的區(qū)分度最高,因為所有的鍵都是唯一的)

建立索引的場景:?

場景一:在where字段后面的字段建立索引??

未添加索引前,耗費0.383秒,基本遍歷整個表

添加索引后,耗費0.001秒,使用了索引

在頻繁的查詢的業(yè)務(wù)中可以對where篩選的字段建立索引,如果where篩選的字段有多個還可以建立聯(lián)合索引?

場景二:經(jīng)常group by和order by的字段上建立索引(因為索引本身就是排好序的,相當(dāng)于查詢之前就已經(jīng)進(jìn)行了排序)??

建立索引前,耗時0.501秒,使用的是所有數(shù)據(jù)在內(nèi)存中排序

建立索引后,耗時0.01秒


場景三:在具有唯一性約束的字段上建立唯一索引(查找到目標(biāo)即可返回不用繼續(xù)查找)??

具有唯一性約束的字段上就可以建立唯一索引,雖然建立了唯一索引對insert操作有一定的影響(需要判斷新增的數(shù)據(jù)是否已經(jīng)在表中),但是建立唯一索引對于查詢的效率是顯著提升的,例如上面的例子,因為建立了唯一索引,一旦查找到id為1001的學(xué)生信息之后就不需要判斷數(shù)據(jù)庫中是否還有id等于1001的學(xué)生(只有唯一一份),直接返回信息即可,如果沒有建立索引,那么就需要全表掃描。

場景四:在DISTINCT后面的字段添加索引(索引已經(jīng)將相同的字段排好序,去重效率更高)? ?

建立了索引,那么默認(rèn)就是按照索引字段的升序排列的,那么相同值的字段也就排列在一起了,那么去重也就變得簡單、高效。

場景五:在join多表連接大表中的連接字段建立索引

沒有建立索引之前,耗時0.697s,沒有使索引

建立索引后,使用了索引,耗時0.003s

小表驅(qū)動大表:? ? ? ? ?
通過對小表進(jìn)行逐一遍歷,同時在大表中的連接字段建立索引即可加快查詢,本案例中,每次取出課程表中course_id和學(xué)生表中學(xué)生的course_id進(jìn)行連接操作,在學(xué)生表中對course_id建立索引即可

場景六:使用字符串的前綴建立索引 ?

前綴建立索引的原因:

  • 由于有些字符串很長,如果為整個字符串建立索引,那么索引將占用很大的空間

  • 由于需要存儲整個字符串,那么數(shù)據(jù)項就會很大,那么索引樹的深度就會加深,檢索速度下降

  • 雖然可能出現(xiàn)在索引中兩個字符串相同,但是再根據(jù)主鍵進(jìn)行回表操作效率依然比較高

場景七:在頻繁使用的列上建立索引或聯(lián)合索引(頻繁使用的字段應(yīng)該在索引的左側(cè))? ?


小結(jié)

  • 以上是適合建立索引的幾種情況,但是實際上是否會使用索引,還是由優(yōu)化器決定的,優(yōu)化器會根據(jù)具體的查詢以及數(shù)據(jù)量進(jìn)行分析決定的

  • 當(dāng)建立了索引但是卻沒有使用的時候有可能是數(shù)據(jù)索引失效或者經(jīng)過優(yōu)化器分析沒有必要使用索引

  • 建立了索引也是存在失效的可能


深入聊聊Mysql索引建立的場景(IT楓斗者)的評論 (共 條)

分享到微博請遵守國家法律
两当县| 宜兰县| 平谷区| 普兰店市| 铜鼓县| 和林格尔县| 凤翔县| 邵武市| 东源县| 渑池县| 万载县| 北辰区| 英吉沙县| 柞水县| 都匀市| 东兰县| 安丘市| 兴化市| 阿鲁科尔沁旗| 卫辉市| 库伦旗| 吉木乃县| 兴仁县| 上蔡县| 宁城县| 云南省| 韶关市| 抚顺市| 永寿县| 确山县| 册亨县| 墨玉县| 社旗县| 伊通| 新密市| 宁夏| 黄山市| 和政县| 南靖县| 沙雅县| 昆山市|