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 值相关联。这样要定位某一条记录时就会很是麻烦,会浪费屡次表数据的访问,而形成总体性能低下。

总结:哈希适用在小范围的精确查找,在列数据很大,又不须要排序,不须要模糊查询,范围查询时有用

相关文章
相关标签/搜索