您好,登錄后才能下訂單哦!
好程序員 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) 數據重復且分布平均的字段。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。