好程式設計師Java培訓教程分享MySQL索引最佳化知識梳理

好程式設計師發表於2020-07-06

   好程式設計師 Java 培訓教程分享 MySQL 索引最佳化知識梳理 MySQL 是當前企業常用的資料庫之一,也是 Java 程式設計師升值加薪的主要技能。有很多 Java 新人反映在剛開始接觸 MySQL 時會被索引困擾,尤其是索引最佳化。接下來就給大家簡單梳理一下 MySQL 索引最佳化相關知識。

   索引

   索引在MySQL 中也叫 key” ,是儲存引擎快速找到記錄的一種資料結構。其功能是幫助我們快速匹配查詢到需要的資料行,相當於超市裡的導購員、書本里的目錄。

   基數

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

   回表

   當對一個列建立索引之後,索引會包含該列的鍵值及鍵值對應行所在的rowid 。透過索引中記錄的 rowid 訪問表中的資料就叫回表。回表次數太多會嚴重影響 SQL 效能,如果回表次數太多,就不應該走索引掃描,應該直接走全表掃描。

   索引最佳化規則:

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

   返回資料的比例是重要的指標,比例越低越容易命中索引,記住這個範圍值——30%

   索引的分類

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

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

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

   複合索引:即一個索引包含多個列,多用於避免回表查詢。

   全文索引:索引的是內容中的關鍵詞,用於全文檢索。

   索引的儲存原理

   DB 在執行一條 SQL 語句的時候,預設的方式是根據搜尋條件進行全表掃描,遇到匹配條件的就加入搜尋結果集合。

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

   新增索引的話,首先去索引列表中查詢,而我們的索引列表是B 類樹的資料結構,查詢的時間複雜度為 O(log2N) ,定位到特定值得行就會非常快,所以其查詢速度就會非常快。

   什麼時候適合新增索引?

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

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

   3) 表連線關聯的列 ;

   4) 排序用到的列 ;

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

   不適合索引的情況:

   1) 表記錄太少 ;

   2) 頻繁修改的欄位 ;

   3) 資料重複且分佈平均的欄位。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2702837/,如需轉載,請註明出處,否則將追究法律責任。

相關文章