mysql 數據庫存儲結構


mysql數據庫存儲結構

B-tree與哈希索引的區別

B-tree索引

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

    • 精確匹配

    • 范圍匹配

    • 最左匹配

Hash索引

索引列值的哈希值+數據行指針:因此找到后還需要根據指針去找數據,造成隨機I/O
  • 適合:

    • 精確匹配
  • 不適合:

    • 模糊匹配
    • 范圍匹配
    • 不能排序
  • 摘抄其他人的的總結:

    • 1、hash索引僅滿足“=”、“IN”和“<=>”查詢,不能使用范圍查詢

      ​ 因為hash索引比較的是經常hash運算之后的hash值,因此只能進行等值的過濾,不能基於范圍的查找,因為經過hash算法處理后的hash值的大小關系,並不能保證與處理前的hash大小關系對應。

    • 2、hash索引無法被用來進行數據的排序操作

      ​ 由於hash索引中存放的都是經過hash計算之后的值,而hash值的大小關系不一定與hash計算之前的值一樣,所以數據庫無法利用hash索引中的值進行排序操作。

    • 3、對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合並后再一起計算 Hash 值,而不是單

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

    • 4、Hash 索引遇到大量Hash值相等的情況后性能並不一定就會比B-Tree索引高。

      ​ 對於選擇性比較低的索引鍵,如果創建 Hash 索引,那么將會存在大量記錄指針信息存於同一個 Hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表數據的訪問,而造成整體性能低下。

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


免責聲明!

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



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