mysql 數據庫存儲結構

mysql數據庫存儲結構

B-tree與哈希索引的區別

B-tree索引

索引是按照順序存儲的,因此,若是按照B-tree索引,能夠直接返回,帶順序的數據,但這個數據只是該索引列含有的信息。所以是順序I/O
  • 適用於:mysql

    • 精確匹配算法

    • 範圍匹配sql

    • 最左匹配數據庫

Hash索引

索引列值的哈希值+數據行指針:所以找到後還須要根據指針去找數據,形成隨機I/O
  • 適合:
    • 精確匹配
  • 不適合:性能

    • 模糊匹配
    • 範圍匹配
    • 不能排序
  • 摘抄其餘人的的總結:指針

    • 一、hash索引僅知足「=」、「IN」和「<=>」查詢,不能使用範圍查詢排序

      ​ 由於hash索引比較的是常常hash運算以後的hash值,所以只能進行等值的過濾,不能基於範圍的查找,由於通過hash算法處理後的hash值的大小關係,並不能保證與處理前的hash大小關係對應。索引

    • 二、hash索引沒法被用來進行數據的排序操做hash

      ​ 因爲hash索引中存放的都是通過hash計算以後的值,而hash值的大小關係不必定與hash計算以前的值同樣,因此數據庫沒法利用hash索引中的值進行排序操做。io

    • 三、對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一塊兒計算 Hash 值,而不是單

      ​ 獨計算 Hash 值,因此經過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也沒法被利用。

    • 四、Hash 索引遇到大量Hash值相等的狀況後性能並不必定就會比B-Tree索引高。

      ​ 對於選擇性比較低的索引鍵,若是建立 Hash 索引,那麼將會存在大量記錄指針信息存於同一個 Hash 值相關聯。這樣要定位某一條記錄時就會很是麻煩,會浪費屢次表數據的訪問,而形成總體性能低下。

總結:哈希適用在小範圍的精確查找,在列數據很大,又不須要排序,不須要模糊查詢,範圍查詢時有用

相關文章
相關標籤/搜索