好程式設計師Java培訓教程分享MySQL索引最佳化知識梳理
好程式設計師 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java培訓分享Java基礎知識總結程式設計師Java
- 好程式設計師Java培訓分享JDK工具條知識點程式設計師JavaJDK
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師web前端培訓分享JavaScript相關知識程式設計師Web前端JavaScript
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java處理異常的幾個小知識程式設計師Java
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- 好程式設計師Web前端培訓分享jQuery面試題梳理程式設計師Web前端jQuery面試題
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享Java教程垃圾回收與演算法程式設計師Java演算法
- 好程式設計師Java培訓分享-簡單的效能最佳化技巧程式設計師Java
- 好程式設計師雲端計算培訓分享msyql知識點講解程式設計師
- 好程式設計師web前端培訓分享CSS基礎知識學習程式設計師Web前端CSS
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Web前端培訓入門之JS基礎知識梳理彙總程式設計師Web前端JS
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師Java教程分享Java技術知識點總結程式設計師Java
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 好程式設計師web前端培訓分享CSS定位的教程程式設計師Web前端CSS
- 好程式設計師HTML5培訓教程-html和css基礎知識程式設計師HTMLCSS
- 好程式設計師雲端計算教程分享Mysql技術知識點程式設計師MySql
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java