mysql底層原理


mysql索引是幫助mysql高效獲取的排好序數據結構

 數據結構

  二叉樹(左小右大)

   

  缺點:如果是遞增或者遞減的數據,就會成一個鏈狀,失去了索引的功能

  紅黑樹

    二叉樹的升級版,如果是遞增或遞減的數據就會做一下優化

     缺點:治標不治本,樹高還是很高 i/o 還是多

  Hash表

    在mysql中每一個索引都對應着hash表中的一個hash值,然后mysql就會把hash值和索引的內存地址存儲起來(k,v),每次用索引查詢的時候,mysql就會把索引通過hash運算,然后得到hash值,  然后就能高效的查到索引的地址(缺點:1.哈希沖突,2.這種結構不適用范圍性查找,所以用的不多    只有數據量特別大,而且基本不會用范圍性查詢)mysql索引支持這種數據結構,只是用的不多

  B-Tree

    增加了橫向寬度,索引和data是在一塊的所以存索引存的少(相對應B+Tree)

  B+Tree *

    現在mysql索引99%都是用的這種索引  優點 :加大了橫向寬度(一個節點大小是16KB,也是左小右大於等於,一個節點對應着一個分支,只有在葉子節點上才存數據地址(MyISAM)(InnoDB存的是主鍵)。非葉子節點存儲的都是冗余的節點。)所以即便是上千萬的數據,縱向(樹的高度)也不會超過4。所以大大的提高了查找效率。目前mysql索引大多數都是用的這種

              MyISAM

  非聚集索引:索引和數據是分開的 索引的data部分只是索引的地址值(輕量)

 

          InnoDB(支持事務)

  2.聚集索引:就是索引的data數據部分是表的全部信息(索引和數據在一塊),這樣就不用在進行 i/o操作了(重量)

  3.InnoDB表必須有主鍵,如果你不加,他會先找一列合適的作為主鍵,如果找不到,就會自己建一列主鍵。因為B+Tree是需要索引來維護的。

  整形主鍵比其他的主鍵(eg:UUID)比較起來會更快(因為用索引查找的時候,會比大小),自增是為了在葉子節點上好存儲(拆中間的肯定比在末尾加慢了)

 InnoDB和MYISAM類型表物理磁盤存儲的區別

 

 

 

 

 

 

 

 

            

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM