溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

好程序員Java培訓(xùn)教程分享MySQL索引優(yōu)化知識梳理

發(fā)布時間:2020-08-10 20:40:02 來源:ITPUB博客 閱讀:155 作者:好程序員 欄目:編程語言

   好程序員 Java 培訓(xùn)教程分享 MySQL 索引優(yōu)化知識梳理 , MySQL 是當(dāng)前企業(yè)常用的數(shù)據(jù)庫之一,也是 Java 程序員升值加薪的主要技能。有很多 Java 新人反映在剛開始接觸 MySQL 時會被索引困擾,尤其是索引優(yōu)化。接下來就給大家簡單梳理一下 MySQL 索引優(yōu)化相關(guān)知識。

   索引

   索引在MySQL 中也叫 key” ,是存儲引擎快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。其功能是幫助我們快速匹配查找到需要的數(shù)據(jù)行,相當(dāng)于超市里的導(dǎo)購員、書本里的目錄。

   基數(shù)

   單個列唯一鍵(distict_keys) 的數(shù)量叫做基數(shù)。

   回表

   當(dāng)對一個列創(chuàng)建索引之后,索引會包含該列的鍵值及鍵值對應(yīng)行所在的rowid 。通過索引中記錄的 rowid 訪問表中的數(shù)據(jù)就叫回表?;乇泶螖?shù)太多會嚴重影響 SQL 性能,如果回表次數(shù)太多,就不應(yīng)該走索引掃描,應(yīng)該直接走全表掃描。

   索引優(yōu)化規(guī)則:

   如果MySQL 估計使用索引比全表掃描還慢,則不會使用索引。

   返回數(shù)據(jù)的比例是重要的指標(biāo),比例越低越容易命中索引,記住這個范圍值——30%

   索引的分類

   主鍵索引:一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創(chuàng)建主鍵索引。注意,一個表只能有一個主鍵。

   單值索引:一個索引只包含單個列,一個表可以由多個單值索引。

   唯一索引:唯一索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

   復(fù)合索引:即一個索引包含多個列,多用于避免回表查詢。

   全文索引:索引的是內(nèi)容中的關(guān)鍵詞,用于全文檢索。

   索引的存儲原理

   DB 在執(zhí)行一條 SQL 語句的時候,默認的方式是根據(jù)搜索條件進行全表掃描,遇到匹配條件的就加入搜索結(jié)果集合。

   如果我們對某一字段增加索引,查詢時就會先去索引列表中快速定位到特定值的行數(shù),大大減少遍歷匹配的行數(shù),所以能明顯增加查詢的速度。

   添加索引的話,首先去索引列表中查詢,而我們的索引列表是B 類樹的數(shù)據(jù)結(jié)構(gòu),查詢的時間復(fù)雜度為 O(log2N) ,定位到特定值得行就會非??欤云洳樵兯俣染蜁浅?臁?/span>

   什么時候適合添加索引?

   1) 主鍵自動建立主鍵索引 ( 唯一索引 );

   2)where 字句中的列,頻繁作為查詢字段的列 ;

   3) 表連接關(guān)聯(lián)的列 ;

   4) 排序用到的列 ;

   5) 列的基數(shù)越大 ( 選擇性大 ) ,索引的效率就越高。

   不適合索引的情況:

   1) 表記錄太少 ;

   2) 頻繁修改的字段 ;

   3) 數(shù)據(jù)重復(fù)且分布平均的字段。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI